diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 037c5d2e..74c47868 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -63,10 +63,18 @@ module EventsHelper tags: %w[p br h1 h2 h3 h4 table tr th td ul ol li a strong b em i sub sup], attributes: %w[href] - Kramdown::Document.new(desc, input: :html, line_width: line_width) + Kramdown::Document.new(spaces(desc), input: :html, line_width: line_width) .to_kramdown - .remove(/ +$/) # Remove extraneous line feeds .gsub(/\\([\"'])/, '\1') # Remove slash before quotes - .gsub(/(\n\n)\n+/, '\1') # Fewer line feeds + .remove(/{::}/) # Markdown artefact + end + + private + + # Cleaner html elements, to correct things like test + def spaces(desc) + desc.gsub(/<(strong|em)> /, ' <\1>') + .gsub(%r{ }, ' ') + .gsub(/ ([,.])/, '\1') end end diff --git a/app/models/event.rb b/app/models/event.rb index 0dc5d3ca..644e0d17 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -95,6 +95,11 @@ class Event < ApplicationRecord tag_list.map { |tag| "##{tag.tr('-', '_').camelize :lower}" } end + def description + # Remove empty paragraphs, which are added by tinymce + self[:description]&.remove '

 

' + end + def to_s "#{start_time.to_date} #{city}: #{title} #{hashtags.join(' ')}" end diff --git a/test/helpers/events_helper_test.rb b/test/helpers/events_helper_test.rb index 8f2ff7f0..53b0c4f3 100644 --- a/test/helpers/events_helper_test.rb +++ b/test/helpers/events_helper_test.rb @@ -9,4 +9,12 @@ class EventsHelperTest < ActionView::TestCase assert_equal '', to_markdown(' ') end + + test 'HTML elements with a space inside' do + assert_equal '**hello world**', to_markdown('hello world ') + assert_equal '**h**,', to_markdown(' h,') + assert_equal '**h**,', to_markdown('h ,') + assert_equal '*ho***h**,', to_markdown('hoh ,') + assert_equal '*ho* **h**,', to_markdown('ho h,') + end end