From 1aa7aa936ba4ebd4dc517fdd3ec9aff25a8ff974 Mon Sep 17 00:00:00 2001
From: echarp <manu@echarp.org>
Date: Tue, 6 Jun 2017 23:08:10 +0200
Subject: [PATCH] Attempt to improve the markdown digest

---
 app/helpers/digest_helper.rb         | 8 ++++++++
 app/helpers/events_helper.rb         | 5 ++++-
 app/views/digests/markdown.html.haml | 2 +-
 app/views/events/show.text.haml      | 2 +-
 4 files changed, 14 insertions(+), 3 deletions(-)
 create mode 100644 app/helpers/digest_helper.rb

diff --git a/app/helpers/digest_helper.rb b/app/helpers/digest_helper.rb
new file mode 100644
index 000000000..2474d2665
--- /dev/null
+++ b/app/helpers/digest_helper.rb
@@ -0,0 +1,8 @@
+# Helper for the digest/markdown views
+module DigestHelper
+  # Important mechanism, to ensure the digest will not have the same footnote
+  # link multiple times
+  def renumber_footnotes(id, description)
+    description.gsub(/\[(\d)*\]/, "[#{id}_\\1]")
+  end
+end
diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb
index 9f1bed9da..390634516 100644
--- a/app/helpers/events_helper.rb
+++ b/app/helpers/events_helper.rb
@@ -56,6 +56,8 @@ module EventsHelper
     item.class.human_attribute_name(label).rjust(12) + " #{value}"
   end
 
+  # Using kramdown, let's parse the html and render it as markdown text
+  # No idea why, but also needs to remove extraneous quote encoding :(
   def to_markdown(description, line_width = -1)
     desc = sanitize description,
                     tags: %w[p br h1 h2 h3 h4 table tr th td ul ol li a strong
@@ -64,8 +66,9 @@ module EventsHelper
     result = Kramdown::Document.new(desc, input: :html, line_width: line_width)
                                .to_kramdown
     # Remove extraneous line feeds
+    return if result.nil? || result.blank?
     result.gsub(/\n\n+/, '
 
-').tr('\\', '').html_safe
+').gsub(/(\w)\\'/, '\1\'')
   end
 end
diff --git a/app/views/digests/markdown.html.haml b/app/views/digests/markdown.html.haml
index e02e9c291..6d188894e 100644
--- a/app/views/digests/markdown.html.haml
+++ b/app/views/digests/markdown.html.haml
@@ -8,7 +8,7 @@
   - @events.sort_by(&:start_time).each do |event|
     [#{event.region.region.try(:code) || event.region.try(:code)} #{event.city}] [#{event.title}](#{event_url event}) - #{display_date event}
     \-----
-    = to_markdown event.description, -1
+    = renumber_footnotes event.id, to_markdown(event.description)
     \
     * #{[event.place_name, event.full_address].compact.join ', '}
     - if event.url.present?
diff --git a/app/views/events/show.text.haml b/app/views/events/show.text.haml
index 02d2326da..04642ea90 100644
--- a/app/views/events/show.text.haml
+++ b/app/views/events/show.text.haml
@@ -15,5 +15,5 @@
   = display_attr @event, :repeat
   = display_attr @event, :rule, t(@event.rule, scope: 'activerecord.attributes.event.rule_values')
 \
-= to_markdown @event.description, 78
+= raw to_markdown @event.description, 78
 ==============================================================================
-- 
GitLab