From 49284eb169617ece34b4c55482ed7d90796eb920 Mon Sep 17 00:00:00 2001
From: Daniel O'Connor
Date: Sun, 4 Feb 2024 15:08:18 +1030
Subject: [PATCH] Fix haml preview (#3610)
* HAML
* rewrite
* Fix specs - but likely still wrong
* Return temple
* Trailing line
* Fix specs
* This was rearranged, apparently.
* Fix tests
* Retain escaping
* Fix specs
* Rubocop
* Attempt to fix rendering
* Fix output
* Move away from filter
* Move away from filter
* Fix spec
* Fix specs
* Fix structure to avoid nested paragraph tags
---
app/helpers/application_helper.rb | 7 +++++
app/helpers/posts_helper.rb | 7 +----
app/views/comments/_single.html.haml | 4 +--
app/views/comments/index.rss.haml | 2 +-
app/views/conversations/show.html.haml | 4 +--
app/views/forums/show.html.haml | 4 +--
app/views/gardens/show.html.haml | 4 +--
app/views/harvests/show.html.haml | 4 +--
app/views/members/_bio.html.haml | 4 +--
app/views/members/show.rss.haml | 2 +-
app/views/notifier_mailer/notify.html.haml | 4 +--
app/views/plantings/index.rss.haml | 2 +-
app/views/plantings/show.html.haml | 4 +--
app/views/posts/_preview.haml | 4 ++-
app/views/posts/_single.html.haml | 4 +--
app/views/posts/index.rss.haml | 2 +-
app/views/posts/show.rss.haml | 2 +-
app/views/seeds/show.html.haml | 4 +--
lib/haml/filters/escaped_markdown.rb | 2 +-
lib/haml/filters/growstuff_markdown.rb | 30 +++++--------------
.../haml/filters/growstuff_markdown_spec.rb | 9 ++----
spec/views/posts/index.html.haml_spec.rb | 2 +-
22 files changed, 48 insertions(+), 63 deletions(-)
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index e5c22500b..ee1b6d7e2 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -34,6 +34,13 @@ module ApplicationHelper
tag.div(asterisk + ' '.html_safe + text, class: ['margin-bottom'])
end
+ # A helper to replace the complex template compilation mess
+ # of HAML, Tilt, and dynamic compilation with interpolated ruby.
+ def markdownify(text)
+ translator = Haml::Filters::GrowstuffMarkdown.new
+ translator.expand_members!(translator.expand_crops!(text.to_s))
+ end
+
#
# Returns an image uri for a given member.
#
diff --git a/app/helpers/posts_helper.rb b/app/helpers/posts_helper.rb
index fbb569ec4..8fde6847b 100644
--- a/app/helpers/posts_helper.rb
+++ b/app/helpers/posts_helper.rb
@@ -1,12 +1,7 @@
# frozen_string_literal: true
module PostsHelper
- def display_post_truncated(post, length: 300)
- truncate(strip_tags(post.body), length:,
- separator: ' ', omission: '... ') { link_to "Read more", post_path(post) }
- end
-
def post_stripped_tags(post, length: 300)
- truncate(strip_tags(post.body), length:)
+ truncate(strip_tags(markdownify(post.body)), length:)
end
end
diff --git a/app/views/comments/_single.html.haml b/app/views/comments/_single.html.haml
index 30db5ad15..bcd1460c1 100644
--- a/app/views/comments/_single.html.haml
+++ b/app/views/comments/_single.html.haml
@@ -31,6 +31,6 @@
= comment.updated_at
.comment-body
- :growstuff_markdown
- #{ strip_tags comment.body }
+ :markdown
+ #{ strip_tags markdownify(comment.body) }
diff --git a/app/views/comments/index.rss.haml b/app/views/comments/index.rss.haml
index fdfda46db..b426d653d 100644
--- a/app/views/comments/index.rss.haml
+++ b/app/views/comments/index.rss.haml
@@ -14,7 +14,7 @@
:escaped_markdown
- #{ strip_tags comment.body }
+ #{ strip_tags markdownify(comment.body) }
%pubdate= comment.created_at.to_fs(:rfc822)
%link= post_url(comment.post)
diff --git a/app/views/conversations/show.html.haml b/app/views/conversations/show.html.haml
index 308686a71..780d65436 100644
--- a/app/views/conversations/show.html.haml
+++ b/app/views/conversations/show.html.haml
@@ -26,8 +26,8 @@
= render 'members/tiny', member: message.sender
.col-12
%p.text-justify
- :growstuff_markdown
- #{ strip_tags(message.body) }
+ :markdown
+ #{ strip_tags markdownify(message.body) }
%li.list-group-item
= icon 'fas', 'reply'
= render 'messages/form', conversation: @conversation
diff --git a/app/views/forums/show.html.haml b/app/views/forums/show.html.haml
index 898ca3240..1faebc348 100644
--- a/app/views/forums/show.html.haml
+++ b/app/views/forums/show.html.haml
@@ -16,8 +16,8 @@
= link_to @forum.owner, @forum.owner
%div
- :growstuff_markdown
- #{ strip_tags(@forum.description) }
+ :markdown
+ #{ strip_tags markdownify(@forum.description) }
- if can? :edit, @forum
= link_to "Edit", edit_forum_path(@forum), class: 'btn btn-default btn-xs'
diff --git a/app/views/gardens/show.html.haml b/app/views/gardens/show.html.haml
index d21eca928..314bf042f 100644
--- a/app/views/gardens/show.html.haml
+++ b/app/views/gardens/show.html.haml
@@ -29,8 +29,8 @@
to plant something in this garden.
%div
%p
- :growstuff_markdown
- #{strip_tags @garden.description}
+ :markdown
+ #{strip_tags markdownify(@garden.description)}
- unless @garden.description
.row-fluid
%p No description available yet.
diff --git a/app/views/harvests/show.html.haml b/app/views/harvests/show.html.haml
index bccde79fa..f0d721971 100644
--- a/app/views/harvests/show.html.haml
+++ b/app/views/harvests/show.html.haml
@@ -58,8 +58,8 @@
.card-header
%h2 Notes
.card-body
- :growstuff_markdown
- #{strip_tags(@harvest.description)}
+ :markdown
+ #{strip_tags markdownify(@harvest.description)}
.col-md-4.col-xs-12
= render 'harvests/owner', harvest: @harvest
diff --git a/app/views/members/_bio.html.haml b/app/views/members/_bio.html.haml
index f22d7eeb0..f652745d5 100644
--- a/app/views/members/_bio.html.haml
+++ b/app/views/members/_bio.html.haml
@@ -5,5 +5,5 @@
- else
#{member.login_name} hasn't written a bio yet.
- else
- :growstuff_markdown
- #{ strip_tags member.bio }
+ :markdown
+ #{ strip_tags markdownify(member.bio) }
diff --git a/app/views/members/show.rss.haml b/app/views/members/show.rss.haml
index c5fca34c9..aded083b0 100644
--- a/app/views/members/show.rss.haml
+++ b/app/views/members/show.rss.haml
@@ -11,4 +11,4 @@
%guid= post_url(post)
%description
:escaped_markdown
- #{ strip_tags post.body }
+ #{ strip_tags markdownify(post.body) }
diff --git a/app/views/notifier_mailer/notify.html.haml b/app/views/notifier_mailer/notify.html.haml
index fcb1366da..e52d105f3 100644
--- a/app/views/notifier_mailer/notify.html.haml
+++ b/app/views/notifier_mailer/notify.html.haml
@@ -12,8 +12,8 @@
\.
%blockquote
- :growstuff_markdown
- #{strip_tags @notification.body}
+ :markdown
+ #{strip_tags markdownify(@notification.body)}
%p
= link_to "Reply to this message", @reply_link
diff --git a/app/views/plantings/index.rss.haml b/app/views/plantings/index.rss.haml
index baeeec922..6a7536755 100644
--- a/app/views/plantings/index.rss.haml
+++ b/app/views/plantings/index.rss.haml
@@ -15,6 +15,6 @@
Sunniness: #{planting['sunniness'] ? planting['sunniness'] : 'unknown' }
Planted from: #{planting['planted_from'] ? planting['planted_from'] : 'unknown' }
:escaped_markdown
- #{ strip_tags planting['description'] }
+ #{ strip_tags markdownify(planting['description']) }
%link= planting_url(slug: planting['slug'])
%guid= planting_url(slug: planting['slug'])
diff --git a/app/views/plantings/show.html.haml b/app/views/plantings/show.html.haml
index 8a9d8739f..e45689820 100644
--- a/app/views/plantings/show.html.haml
+++ b/app/views/plantings/show.html.haml
@@ -52,8 +52,8 @@
.card-header
%h2 Notes
.card-body
- :growstuff_markdown
- #{strip_tags(@planting.description)}
+ :markdown
+ #{strip_tags markdownify(@planting.description)}
%section= render 'plantings/photos', photos: @photos, planting: @planting
%section.harvests
diff --git a/app/views/posts/_preview.haml b/app/views/posts/_preview.haml
index 98f487156..21560756c 100644
--- a/app/views/posts/_preview.haml
+++ b/app/views/posts/_preview.haml
@@ -10,7 +10,9 @@
by
= succeed "," do
%a.font-weight-bold= post.author
-%p.post-body= post_stripped_tags(post, length: 300)
+.post-body
+ :markdown
+ #{post_stripped_tags(post, length: 300)}
%h6.font-weight-bold.mb-3
- post.crops.each do |crop|
= link_to crop do
diff --git a/app/views/posts/_single.html.haml b/app/views/posts/_single.html.haml
index 10a372b6d..fa7a07aea 100644
--- a/app/views/posts/_single.html.haml
+++ b/app/views/posts/_single.html.haml
@@ -15,5 +15,5 @@
= link_to "Permalink", post
-:growstuff_markdown
- #{ strip_tags @post.body }
+:markdown
+ #{ strip_tags markdownify(@post.body) }
diff --git a/app/views/posts/index.rss.haml b/app/views/posts/index.rss.haml
index 81b1cd352..6e485464d 100644
--- a/app/views/posts/index.rss.haml
+++ b/app/views/posts/index.rss.haml
@@ -9,7 +9,7 @@
%title #{post.subject} by #{post.author.login_name}
%description
:escaped_markdown
- #{ strip_tags post.body }
+ #{ strip_tags markdownify(post.body) }
%pubdate= post.created_at.to_fs(:rfc822)
%link= post_url(post)
%guid= post_url(post)
diff --git a/app/views/posts/show.rss.haml b/app/views/posts/show.rss.haml
index 664703acc..f98642a5e 100644
--- a/app/views/posts/show.rss.haml
+++ b/app/views/posts/show.rss.haml
@@ -15,7 +15,7 @@
:escaped_markdown
- #{ strip_tags comment.body }
+ #{ strip_tags markdownify(comment.body) }
%pubdate= comment.created_at.to_fs(:rfc822)
%link= post_url(@post)
diff --git a/app/views/seeds/show.html.haml b/app/views/seeds/show.html.haml
index 615afc58b..da321243e 100644
--- a/app/views/seeds/show.html.haml
+++ b/app/views/seeds/show.html.haml
@@ -45,8 +45,8 @@
.card-header
%h2 Notes
.card-body
- :growstuff_markdown
- #{strip_tags(@seed.description)}
+ :markdown
+ #{strip_tags markdownify(@seed.description)}
- if current_member
- if @seed.tradable && current_member != @seed.owner
diff --git a/lib/haml/filters/escaped_markdown.rb b/lib/haml/filters/escaped_markdown.rb
index bc219a72a..527fca544 100644
--- a/lib/haml/filters/escaped_markdown.rb
+++ b/lib/haml/filters/escaped_markdown.rb
@@ -4,7 +4,7 @@ require 'bluecloth'
require 'haml/filters/growstuff_markdown'
class Haml::Filters
- class EscapedMarkdown < Haml::Filters::GrowstuffMarkdown
+ class EscapedMarkdown < Haml::Filters::Markdown
def compile(node)
[:escape, true, super(node)]
end
diff --git a/lib/haml/filters/growstuff_markdown.rb b/lib/haml/filters/growstuff_markdown.rb
index 1304e8171..0ce797eee 100644
--- a/lib/haml/filters/growstuff_markdown.rb
+++ b/lib/haml/filters/growstuff_markdown.rb
@@ -1,29 +1,17 @@
# frozen_string_literal: true
-require 'bluecloth'
-
+# TODO: Move this file/helper elsewhere, as it is used as a pre filter rather than plugging into the haml architecture
class Haml::Filters
- class GrowstuffMarkdown < Haml::Filters::Markdown
-
- def compile(node)
- @expanded = node.value[:text]
- expand_crops!
- expand_members!
- node.value[:text] = @expanded
- compile_with_tilt(node, 'markdown')
- end
-
- private
-
+ class GrowstuffMarkdown
CROP_REGEX = /(?