diff options
author | Benjamin Neff <benjamin@coding4coffee.ch> | 2022-07-13 06:05:58 +0300 |
---|---|---|
committer | Benjamin Neff <benjamin@coding4coffee.ch> | 2022-07-16 05:34:07 +0300 |
commit | dd3bc39c97e6b6d17646c8cbf33e13c252e0c2e4 (patch) | |
tree | 41be18c4c3244506b4abe7a7bc023fa1e5c139ae /lib | |
parent | 3c02a1f067b718e2d1806b65eef5bc9d9f446757 (diff) |
Render markdown to html for notifications
Diffstat (limited to 'lib')
-rw-r--r-- | lib/diaspora/mentionable.rb | 12 | ||||
-rw-r--r-- | lib/diaspora/message_renderer.rb | 32 |
2 files changed, 28 insertions, 16 deletions
diff --git a/lib/diaspora/mentionable.rb b/lib/diaspora/mentionable.rb index 2b447dc5f..d009ce6a5 100644 --- a/lib/diaspora/mentionable.rb +++ b/lib/diaspora/mentionable.rb @@ -54,8 +54,9 @@ module Diaspora::Mentionable # # @param [String] message text # @param [Array] allowed_people ids of people that are allowed to stay + # @param [Boolean] absolute_links (false) render mentions with absolute links # @return [String] message text with filtered mentions - def self.filter_people(msg_text, allowed_people) + def self.filter_people(msg_text, allowed_people, absolute_links: false) mentioned_ppl = people_from_string(msg_text) msg_text.to_s.gsub(REGEX) {|match_str| @@ -65,7 +66,7 @@ module Diaspora::Mentionable if person && allowed_people.include?(person.id) match_str else - "@#{MentionsInternal.profile_link(person, name, diaspora_id)}" + "@#{MentionsInternal.profile_link(person, name, diaspora_id, absolute: absolute_links)}" end } end @@ -121,11 +122,14 @@ module Diaspora::Mentionable # # @param [Person] AR Person # @param [String] display name + # @param [String] diaspora_id + # @param [Boolean] absolute (false) render absolute link # @return [String] markdown person link - def self.profile_link(person, display_name, diaspora_id) + def self.profile_link(person, display_name, diaspora_id, absolute: false) return display_name || diaspora_id unless person.present? - "[#{display_name || person.name}](#{Rails.application.routes.url_helpers.person_path(person)})" + url_helper = Rails.application.routes.url_helpers + "[#{display_name || person.name}](#{absolute ? url_helper.person_url(person) : url_helper.person_path(person)})" end end end diff --git a/lib/diaspora/message_renderer.rb b/lib/diaspora/message_renderer.rb index d3f0e0232..2f9ef423f 100644 --- a/lib/diaspora/message_renderer.rb +++ b/lib/diaspora/message_renderer.rb @@ -56,8 +56,8 @@ module Diaspora @message = renderer.render(message).strip end - def markdownify - renderer = Diaspora::Markdownify::HTML.new options[:markdown_render_options] + def markdownify(renderer_class=Diaspora::Markdownify::HTML) + renderer = renderer_class.new options[:markdown_render_options] markdown = Redcarpet::Markdown.new renderer, options[:markdown_options] @message = markdown.render message @@ -76,8 +76,8 @@ module Diaspora @message = Diaspora::Mentionable.format message, options[:mentioned_people] end - if options[:disable_hovercards] || options[:link_all_mentions] - @message = Diaspora::Mentionable.filter_people message, [] + if options[:disable_hovercards] + @message = Diaspora::Mentionable.filter_people(message, [], absolute_links: true) else make_mentions_plain_text end @@ -108,7 +108,6 @@ module Diaspora end DEFAULTS = {mentioned_people: [], - link_all_mentions: false, disable_hovercards: false, truncate: false, append: nil, @@ -137,12 +136,8 @@ module Diaspora # @param [Hash] opts Global options affecting output # @option opts [Array<Person>] :mentioned_people ([]) List of people # allowed to mention - # @option opts [Boolean] :link_all_mentions (false) Whether to link - # all mentions. This makes plain links to profiles for people not in - # :mentioned_people # @option opts [Boolean] :disable_hovercards (true) Render all mentions - # as profile links. This implies :link_all_mentions and ignores - # :mentioned_people + # as absolute profile links. This ignores :mentioned_people # @option opts [#to_i, Boolean] :truncate (false) Truncate message to # the specified length # @option opts [String] :append (nil) Append text to the end of @@ -205,7 +200,7 @@ module Diaspora render_tags squish append_and_truncate - }.html_safe + }.html_safe # rubocop:disable Rails/OutputSafety end # @param [Hash] opts Override global output options, see {#initialize} @@ -220,7 +215,20 @@ module Diaspora render_tags squish append_and_truncate - }.html_safe + }.html_safe # rubocop:disable Rails/OutputSafety + end + + def markdownified_for_mail + process(disable_hovercards: true) { + process_newlines + normalize + diaspora_links + camo_urls if AppConfig.privacy.camo.proxy_markdown_images? + render_mentions + markdownify(Diaspora::Markdownify::Email) + squish + append_and_truncate + }.html_safe # rubocop:disable Rails/OutputSafety end # Get a short summary of the message |