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 = /(?