diff --git a/Gemfile b/Gemfile index f639e1491..aaa3f035b 100644 --- a/Gemfile +++ b/Gemfile @@ -43,6 +43,7 @@ gem 'react-rails' gem 'sidekiq' +gem 'diffy' gem 'paper_trail' group :production do diff --git a/Gemfile.lock b/Gemfile.lock index b76b42c19..c3096711b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -60,7 +60,7 @@ GEM activerecord (>= 3.2, < 7.0) rake (>= 10.4, < 14.0) arel (9.0.0) - autoprefixer-rails (9.8.4) + autoprefixer-rails (9.8.5) execjs babel-source (5.8.35) babel-transpiler (0.7.0) @@ -112,10 +112,11 @@ GEM responders warden (~> 1.2.3) diff-lcs (1.4.4) - dotenv (2.7.5) - dotenv-rails (2.7.5) - dotenv (= 2.7.5) - railties (>= 3.2, < 6.1) + diffy (3.3.0) + dotenv (2.7.6) + dotenv-rails (2.7.6) + dotenv (= 2.7.6) + railties (>= 3.2) draper (3.0.1) actionpack (~> 5.0) activemodel (~> 5.0) @@ -129,10 +130,10 @@ GEM erubis (2.7.0) eventmachine (1.2.7) execjs (2.7.0) - factory_bot (6.0.2) + factory_bot (6.1.0) activesupport (>= 5.0.0) - factory_bot_rails (6.0.0) - factory_bot (~> 6.0.0) + factory_bot_rails (6.1.0) + factory_bot (~> 6.1.0) railties (>= 5.0.0) faker (2.13.0) i18n (>= 1.6, < 2) @@ -218,12 +219,12 @@ GEM mini_portile2 (2.4.0) minitest (5.14.1) msgpack (1.3.3) - multi_json (1.14.1) + multi_json (1.15.0) multi_xml (0.6.0) multipart-post (2.1.1) nenv (0.3.0) nio4r (2.5.2) - nokogiri (1.10.9) + nokogiri (1.10.10) mini_portile2 (~> 2.4.0) notiffany (0.1.3) nenv (~> 0.1) @@ -416,7 +417,7 @@ GEM rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) - websocket-driver (0.7.2) + websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) @@ -440,6 +441,7 @@ DEPENDENCIES country_select (~> 1.3) database_cleaner (~> 1.6) devise (~> 4.7) + diffy dotenv-rails draper (~> 3.0.1) factory_bot_rails diff --git a/app/assets/stylesheets/modules/_proposal.scss b/app/assets/stylesheets/modules/_proposal.scss index dd0de0d17..c996496a8 100644 --- a/app/assets/stylesheets/modules/_proposal.scss +++ b/app/assets/stylesheets/modules/_proposal.scss @@ -267,3 +267,9 @@ div.col-md-4 { padding-bottom: 0; } } + +.diff-view { + margin-bottom: 10px; + padding-bottom: 10px; + border-bottom: 1px solid grey; +} diff --git a/app/helpers/proposal_helper.rb b/app/helpers/proposal_helper.rb index d803eb528..05ab74d3a 100644 --- a/app/helpers/proposal_helper.rb +++ b/app/helpers/proposal_helper.rb @@ -1,4 +1,11 @@ module ProposalHelper + def diff(content1, content2) + changes = Diffy::Diff.new(content1, content2, + include_plus_and_minus_in_html: true, + include_diff_info: true) + changes.to_s.present? ? changes.to_s(:html).html_safe : 'No Changes' + end + def rating_tooltip <<-HTML

Ratings Guide

diff --git a/app/views/proposals/_contents.html.haml b/app/views/proposals/_contents.html.haml index e847dc688..bc83da51f 100644 --- a/app/views/proposals/_contents.html.haml +++ b/app/views/proposals/_contents.html.haml @@ -22,3 +22,14 @@ %div = value.capitalize %div + +- unless proposal.changeset_fields.blank? + %h2.fieldset-legend Proposal Diff... + - proposal.versions.each do |version| + #diff-view + - version.changeset.each do |k, (old, new)| + %h3.control-label= k.titleize + %div= diff old, new + +:css + = #{Diffy::CSS}