feat(messages): render markdown in message body
uses redcarpet gem to render markdown to html. Also a html email template is added.
This commit is contained in:
parent
fb8ccfea4a
commit
f7302bc8fc
5 changed files with 29 additions and 3 deletions
4
Gemfile
4
Gemfile
|
@ -60,6 +60,7 @@ gem 'mime-types'
|
||||||
gem 'midi-smtp-server'
|
gem 'midi-smtp-server'
|
||||||
gem 'rswag-api'
|
gem 'rswag-api'
|
||||||
gem 'rswag-ui'
|
gem 'rswag-ui'
|
||||||
|
gem 'maildown'
|
||||||
|
|
||||||
# we use the git version of acts_as_versioned, and need to include it in this Gemfile
|
# we use the git version of acts_as_versioned, and need to include it in this Gemfile
|
||||||
gem 'acts_as_versioned', git: 'https://github.com/technoweenie/acts_as_versioned.git'
|
gem 'acts_as_versioned', git: 'https://github.com/technoweenie/acts_as_versioned.git'
|
||||||
|
@ -75,6 +76,7 @@ gem 'foodsoft_polls', path: 'plugins/polls'
|
||||||
# gem 'foodsoft_printer', path: 'plugins/printer'
|
# gem 'foodsoft_printer', path: 'plugins/printer'
|
||||||
# gem 'foodsoft_uservoice', path: 'plugins/uservoice'
|
# gem 'foodsoft_uservoice', path: 'plugins/uservoice'
|
||||||
|
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
gem 'sqlite3', '~> 1.3.6'
|
gem 'sqlite3', '~> 1.3.6'
|
||||||
gem 'mailcatcher'
|
gem 'mailcatcher'
|
||||||
|
@ -126,3 +128,5 @@ group :test do
|
||||||
gem 'rswag-specs'
|
gem 'rswag-specs'
|
||||||
gem 'hashie', '~> 3.4.6', require: false # https://github.com/westfieldlabs/apivore/issues/114
|
gem 'hashie', '~> 3.4.6', require: false # https://github.com/westfieldlabs/apivore/issues/114
|
||||||
end
|
end
|
||||||
|
|
||||||
|
gem "redcarpet", "~> 3.6"
|
||||||
|
|
12
Gemfile.lock
12
Gemfile.lock
|
@ -283,6 +283,10 @@ GEM
|
||||||
activerecord
|
activerecord
|
||||||
kaminari-core (= 1.2.2)
|
kaminari-core (= 1.2.2)
|
||||||
kaminari-core (1.2.2)
|
kaminari-core (1.2.2)
|
||||||
|
kramdown (2.4.0)
|
||||||
|
rexml
|
||||||
|
kramdown-parser-gfm (1.1.0)
|
||||||
|
kramdown (~> 2.0)
|
||||||
less (2.6.0)
|
less (2.6.0)
|
||||||
commonjs (~> 0.2.7)
|
commonjs (~> 0.2.7)
|
||||||
less-rails (5.0.0)
|
less-rails (5.0.0)
|
||||||
|
@ -308,6 +312,9 @@ GEM
|
||||||
skinny (>= 0.1.2)
|
skinny (>= 0.1.2)
|
||||||
sqlite3-ruby
|
sqlite3-ruby
|
||||||
thin
|
thin
|
||||||
|
maildown (3.3.1)
|
||||||
|
actionmailer (>= 4.0.0)
|
||||||
|
kramdown-parser-gfm
|
||||||
marcel (1.0.2)
|
marcel (1.0.2)
|
||||||
matrix (0.4.2)
|
matrix (0.4.2)
|
||||||
method_source (1.0.0)
|
method_source (1.0.0)
|
||||||
|
@ -413,6 +420,7 @@ GEM
|
||||||
rb-fsevent (0.11.2)
|
rb-fsevent (0.11.2)
|
||||||
rb-inotify (0.10.1)
|
rb-inotify (0.10.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
|
redcarpet (3.6.0)
|
||||||
redis (5.0.5)
|
redis (5.0.5)
|
||||||
redis-client (>= 0.9.0)
|
redis-client (>= 0.9.0)
|
||||||
redis-client (0.11.2)
|
redis-client (0.11.2)
|
||||||
|
@ -635,6 +643,7 @@ DEPENDENCIES
|
||||||
listen
|
listen
|
||||||
mail (~> 2.7.1)
|
mail (~> 2.7.1)
|
||||||
mailcatcher
|
mailcatcher
|
||||||
|
maildown
|
||||||
midi-smtp-server
|
midi-smtp-server
|
||||||
mime-types
|
mime-types
|
||||||
mysql2
|
mysql2
|
||||||
|
@ -652,6 +661,7 @@ DEPENDENCIES
|
||||||
rails_tokeninput
|
rails_tokeninput
|
||||||
ransack
|
ransack
|
||||||
recurring_select!
|
recurring_select!
|
||||||
|
redcarpet (~> 3.6)
|
||||||
resque
|
resque
|
||||||
roo
|
roo
|
||||||
roo-xls
|
roo-xls
|
||||||
|
@ -686,4 +696,4 @@ DEPENDENCIES
|
||||||
whenever
|
whenever
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.4.3
|
2.4.5
|
||||||
|
|
|
@ -132,9 +132,15 @@ class Message < ApplicationRecord
|
||||||
user.role_admin?
|
user.role_admin?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render_markdown
|
||||||
|
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true, strikethrough: true, footnotes: true)
|
||||||
|
return markdown.render(body)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def create_salt
|
def create_salt
|
||||||
self.salt = [Array.new(6) { rand(256).chr }.join].pack("m").chomp
|
self.salt = [Array.new(6) { rand(256).chr }.join].pack("m").chomp
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -33,7 +33,7 @@
|
||||||
- if @message.can_toggle_private?(current_user)
|
- if @message.can_toggle_private?(current_user)
|
||||||
= link_to t('.change_visibility'), toggle_private_message_path(@message), method: :post, class: 'btn btn-mini'
|
= link_to t('.change_visibility'), toggle_private_message_path(@message), method: :post, class: 'btn btn-mini'
|
||||||
%hr/
|
%hr/
|
||||||
%p= simple_format(h(@message.body))
|
= raw @message.render_markdown
|
||||||
%hr/
|
%hr/
|
||||||
%p
|
%p
|
||||||
= link_to t('.reply'), new_message_path(:message => {:reply_to => @message.id}), class: 'btn'
|
= link_to t('.reply'), new_message_path(:message => {:reply_to => @message.id}), class: 'btn'
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
= raw @message.render_markdown
|
||||||
|
%hr/
|
||||||
|
%pre
|
||||||
|
- if @message.group
|
||||||
|
= raw t '.footer_group', group: @message.group.name
|
||||||
|
= raw t '.footer', reply_url: new_message_url('message[reply_to]' => @message.id), msg_url: message_url(@message), profile_url: my_profile_url
|
Loading…
Reference in a new issue