aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhellekin <hellekin@cepheide.org>2020-10-27 20:01:32 +0100
committerhellekin <hellekin@cepheide.org>2020-10-27 20:01:32 +0100
commitbcd0f419b6ae5142c6a41ac5ace0f881808eb136 (patch)
tree9dd0d9b087042661c3bfefe539e0e83d65cbea83
parenteca6705b299c5afe2e8ed995529f7afc5559ae0b (diff)
parentc3f4936dbb524237d1e3d465d2301627758c2180 (diff)
downloadincommon-map-bcd0f419b6ae5142c6a41ac5ace0f881808eb136.tar.gz
Merge branch 'markdown'
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock5
-rw-r--r--app/helpers/application_helper.rb43
-rw-r--r--app/views/resources/_resource.html.erb2
4 files changed, 51 insertions, 1 deletions
diff --git a/Gemfile b/Gemfile
index 1897dd4..f094cc3 100644
--- a/Gemfile
+++ b/Gemfile
@@ -28,6 +28,8 @@ gem 'jbuilder', '~> 2.7'
gem 'acts_as_list'
# Use bitfields in models
gem 'bitfields'
+# Use Markdown for descriptions
+gem 'commonmarker'
# Use Discourse API
gem 'discourse_api'
# User pagination
diff --git a/Gemfile.lock b/Gemfile.lock
index aa16165..9d940e0 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -66,6 +66,8 @@ GEM
builder (3.2.4)
byebug (11.1.3)
coderay (1.1.3)
+ commonmarker (0.21.0)
+ ruby-enum (~> 0.5)
concurrent-ruby (1.1.7)
crass (1.0.6)
discourse_api (0.42.0)
@@ -170,6 +172,8 @@ GEM
rb-fsevent (0.10.4)
rb-inotify (0.10.1)
ffi (~> 1.0)
+ ruby-enum (0.8.0)
+ i18n
sass-rails (6.0.0)
sassc-rails (~> 2.1, >= 2.1.1)
sassc (2.4.0)
@@ -226,6 +230,7 @@ DEPENDENCIES
bitfields
bootsnap (>= 1.4.2)
byebug
+ commonmarker
discourse_api
jbuilder (~> 2.7)
kaminari
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 0b22f4b..2b6e109 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -7,4 +7,47 @@ module ApplicationHelper
current_agency.send(:"#{role}?")
end
end
+
+ # Markdown helper
+ # Always use all extensions. Additional parser and render options may be
+ # passed as a second argument.
+ #
+ # @param markdown (String) a string to parse as Markdown source
+ # @param options (String or Array) an optional parser/renderer option
+ # @return String HTML-formatted from Mardkown source
+ def m(markdown, options = nil)
+ tag.div(
+ CommonMarker.render_doc(
+ markdown.to_s,
+ options.to_a + default_commonmarker_options,
+ default_commonmarker_extensions
+ ).to_html.html_safe, class: 'markdown')
+ end
+
+ private
+
+ # CommonMarker extensions
+ # See https://github.com/gjtorikian/commonmarker#extensions
+ def default_commonmarker_extensions
+ [
+ :table,
+ :tasklist,
+ :strikethrough,
+ :autolink,
+ :tagfilter
+ ]
+ end
+
+ # CommonMarker options
+ # See https://github.com/gjtorikian/commonmarker#options
+ def default_commonmarker_options
+ [
+ #:HARDBREAKS, # only seems to work with render_html, but then all others
+ # only work with render_doc
+ :FOOTNOTES,
+ :SMART,
+ :STRIKETHROUGH_DOUBLE_TILDE,
+ :VALIDATE_UTF8
+ ]
+ end
end
diff --git a/app/views/resources/_resource.html.erb b/app/views/resources/_resource.html.erb
index 585bed8..2debec2 100644
--- a/app/views/resources/_resource.html.erb
+++ b/app/views/resources/_resource.html.erb
@@ -5,7 +5,7 @@
<time datetime="<%= h resource.updated_at %>" class="updated_at">
<p class="identifier"><%= resource_url(resource) %></p>
</header>
- <div><%= h resource.description %></div>
+ <%= m resource.description %>
<hr>
<code><pre><%= h JSON.pretty_generate(resource.feature.as_json) %></pre></code>
<p>... <%= session[:current_agent] %>...</p>