diff --git a/app/assets/stylesheets/simple_discussion.scss b/app/assets/stylesheets/simple_discussion.scss
index c63f794..507cce2 100644
--- a/app/assets/stylesheets/simple_discussion.scss
+++ b/app/assets/stylesheets/simple_discussion.scss
@@ -248,8 +248,13 @@
border: 1px solid #80808029;
.card-body {
+ overflow-x: auto;
margin-top: 16px;
}
+ .card-body iframe {
+ border-radius: $post-body-border-radius;
+ border: 2px solid #80808029;
+ }
}
// Formatting the listtile for user details
@@ -296,3 +301,25 @@
.thread-page-container {
padding: 24px;
}
+
+.preview::before {
+ content: "Preview";
+ width: 80px;
+}
+
+p {
+ font-size: 18px;
+}
+
+blockquote {
+ border-left: 5px solid #e9ecef;
+ padding: 10px 20px;
+ margin: 10px 0;
+ font-size: 18px;
+ font-weight: 500;
+ color: #6c757d;
+}
+
+.CodeMirror-line span {
+ font-size: 18px;
+}
diff --git a/app/helpers/simple_discussion/forum_posts_helper.rb b/app/helpers/simple_discussion/forum_posts_helper.rb
index c63c4a6..f642614 100644
--- a/app/helpers/simple_discussion/forum_posts_helper.rb
+++ b/app/helpers/simple_discussion/forum_posts_helper.rb
@@ -1,3 +1,46 @@
+require "redcarpet"
+class CustomRenderer < Redcarpet::Render::HTML
+ def initialize(circuit_embed: false, video_embed: false, user_tagging: false)
+ @circuit_embed = circuit_embed
+ @video_embed = video_embed
+ @user_tagging = user_tagging
+ super()
+ end
+
+ def image(url, title, alt_text)
+ case alt_text
+ when "Circuit"
+ if @circuit_embed
+ " "
+ else
+ " "
+ end
+ when "Video"
+ if @video_embed
+ video_id = url.split("v=")[1].split("&")[0]
+ "VIDEO "
+ else
+ " "
+ end
+ else
+ # default image rendering
+ " "
+ end
+ end
+
+ def link(link, _title, content)
+ if @user_tagging && link.start_with?("/users/")
+ uri = URI.parse(link)
+ uri.path =~ %r{^/users/\d+/?$}
+ # remove the brackets from the content
+ content = content.gsub(/[()]/, "")
+ "#{content} "
+ else
+ "#{content} "
+ end
+ end
+end
+
module SimpleDiscussion::ForumPostsHelper
def category_link(category)
link_to category.name, simple_discussion.forum_category_forum_threads_path(category),
@@ -6,7 +49,20 @@ def category_link(category)
# Override this method to provide your own content formatting like Markdown
def formatted_content(text)
- simple_format(text)
+ options = {
+ hard_wrap: true,
+ filter_html: true,
+ autolink: true,
+ tables: true
+ }
+
+ renderer = CustomRenderer.new(
+ circuit_embed: SimpleDiscussion.markdown_circuit_embed,
+ video_embed: SimpleDiscussion.markdown_video_embed,
+ user_tagging: SimpleDiscussion.markdown_user_tagging
+ )
+ markdown = Redcarpet::Markdown.new(renderer, options)
+ markdown.render(text).html_safe
end
def forum_post_classes(forum_post)
diff --git a/app/views/layouts/simple_discussion.html.erb b/app/views/layouts/simple_discussion.html.erb
index c4f1dd5..64d665a 100644
--- a/app/views/layouts/simple_discussion.html.erb
+++ b/app/views/layouts/simple_discussion.html.erb
@@ -76,6 +76,10 @@
<% parent_layout("application") %>
+
+
+
+
diff --git a/app/views/simple_discussion/forum_posts/_form.html.erb b/app/views/simple_discussion/forum_posts/_form.html.erb
index 1a99524..c982866 100644
--- a/app/views/simple_discussion/forum_posts/_form.html.erb
+++ b/app/views/simple_discussion/forum_posts/_form.html.erb
@@ -1,7 +1,14 @@
-
-
- <%# Describe text formatting options here with a link %>
- <%#= link_to "Parsed with Markdown", "https://guides.github.com/features/mastering-markdown/", target: "_blank" %>
+
+
<% end %>
+
+
+
+
+
+
diff --git a/app/views/simple_discussion/forum_posts/_spam_report.html.erb b/app/views/simple_discussion/forum_posts/_spam_report.html.erb
index 87e4148..7e75a34 100644
--- a/app/views/simple_discussion/forum_posts/_spam_report.html.erb
+++ b/app/views/simple_discussion/forum_posts/_spam_report.html.erb
@@ -31,7 +31,7 @@
- <%= link_to spam_report.user.name, user_path(spam_report.user), class: "btn btn-outline-primary", title: t('user_profile') %>
+ <%= link_to spam_report.user.name, user_profile_link(spam_report.user), class: "btn btn-outline-primary", title: t('user_profile') %>
diff --git a/app/views/simple_discussion/forum_threads/_form.html.erb b/app/views/simple_discussion/forum_threads/_form.html.erb
index 49e37e8..cbf9318 100644
--- a/app/views/simple_discussion/forum_threads/_form.html.erb
+++ b/app/views/simple_discussion/forum_threads/_form.html.erb
@@ -1,6 +1,14 @@
<%= form_for @forum_thread,
url: (@forum_thread.persisted? ? simple_discussion.forum_thread_path(@forum_thread) : simple_discussion.forum_threads_path),
- html: { data: {behavior: "comment-form"} } do |f| %>
+ html: {
+ data: {
+ behavior: "comment-form",
+ controller: "simplemde",
+ simplemde_circuit_embed_value: SimpleDiscussion.markdown_circuit_embed,
+ simplemde_user_tagging_value: SimpleDiscussion.markdown_user_tagging,
+ simplemde_video_embed_value: SimpleDiscussion.markdown_video_embed,
+ }
+ } do |f| %>
<% if @forum_thread.errors.any? %>
@@ -24,7 +32,7 @@
<%= f.fields_for :forum_posts do |p| %>
<%= p.label :body, t('what_help_needed') %>
- <%= p.text_area :body, placeholder: t('add_a_comment'), rows: 10, class: "form-control simplemde", data: { behavior: "comment-body" } %>
+ <%= p.text_area :body, placeholder: t('add_a_comment'), rows: 10, class: "form-control simplemde", data: { behavior: "comment-body", simplemde_target: "textarea" } %>
<% end %>
<% end %>
@@ -36,4 +44,58 @@
<%= f.button "Update Thread", class: "btn forum-primary-btn", data: {disable_with: "
#{t('saving')}"} %>
<% end %>
+
+
+
<% end %>
+
+
+
+
+
+
diff --git a/app/views/simple_discussion/forum_threads/show.html.erb b/app/views/simple_discussion/forum_threads/show.html.erb
index fb4f016..3201d9f 100644
--- a/app/views/simple_discussion/forum_threads/show.html.erb
+++ b/app/views/simple_discussion/forum_threads/show.html.erb
@@ -27,6 +27,7 @@
+
<%= t("created_by") %> <%= @forum_thread.user.name %> • <%= time_ago_in_words(@forum_thread.created_at) %> <%= t("ago") %>
diff --git a/gemfiles/rails_6_1.gemfile.lock b/gemfiles/rails_6_1.gemfile.lock
index cffead0..2f16a98 100644
--- a/gemfiles/rails_6_1.gemfile.lock
+++ b/gemfiles/rails_6_1.gemfile.lock
@@ -6,6 +6,7 @@ PATH
friendly_id (>= 5.2.0)
language_filter (>= 0.3.01)
rails (>= 4.2)
+ redcarpet (>= 3.3.4)
will_paginate (>= 3.1.0)
GEM
@@ -122,7 +123,7 @@ GEM
net-smtp (0.5.0)
net-protocol
nio4r (2.7.3)
- nokogiri (1.16.6-x86_64-linux)
+ nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
orm_adapter (0.5.0)
parallel (1.25.1)
@@ -165,6 +166,7 @@ GEM
thor (~> 1.0)
rainbow (3.1.1)
rake (13.2.1)
+ redcarpet (3.6.0)
regexp_parser (2.9.2)
responders (3.1.1)
actionpack (>= 5.2)
diff --git a/gemfiles/rails_7.gemfile.lock b/gemfiles/rails_7.gemfile.lock
index 2ded953..427ffc2 100644
--- a/gemfiles/rails_7.gemfile.lock
+++ b/gemfiles/rails_7.gemfile.lock
@@ -6,6 +6,7 @@ PATH
friendly_id (>= 5.2.0)
language_filter (>= 0.3.01)
rails (>= 4.2)
+ redcarpet (>= 3.3.4)
will_paginate (>= 3.1.0)
GEM
@@ -128,7 +129,7 @@ GEM
net-smtp (0.5.0)
net-protocol
nio4r (2.7.3)
- nokogiri (1.16.6-x86_64-linux)
+ nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
orm_adapter (0.5.0)
parallel (1.25.1)
@@ -171,6 +172,7 @@ GEM
zeitwerk (~> 2.5)
rainbow (3.1.1)
rake (13.2.1)
+ redcarpet (3.6.0)
regexp_parser (2.9.2)
responders (3.1.1)
actionpack (>= 5.2)
diff --git a/gemfiles/rails_7_1.gemfile.lock b/gemfiles/rails_7_1.gemfile.lock
index d2ea195..b603725 100644
--- a/gemfiles/rails_7_1.gemfile.lock
+++ b/gemfiles/rails_7_1.gemfile.lock
@@ -6,6 +6,7 @@ PATH
friendly_id (>= 5.2.0)
language_filter (>= 0.3.01)
rails (>= 4.2)
+ redcarpet (>= 3.3.4)
will_paginate (>= 3.1.0)
GEM
@@ -145,7 +146,7 @@ GEM
net-smtp (0.5.0)
net-protocol
nio4r (2.7.3)
- nokogiri (1.16.6-x86_64-linux)
+ nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
orm_adapter (0.5.0)
parallel (1.25.1)
@@ -198,6 +199,7 @@ GEM
rake (13.2.1)
rdoc (6.7.0)
psych (>= 4.0.0)
+ redcarpet (3.6.0)
regexp_parser (2.9.2)
reline (0.5.9)
io-console (~> 0.5)
diff --git a/gemfiles/rails_main.gemfile.lock b/gemfiles/rails_main.gemfile.lock
index 25885b2..c138c8d 100644
--- a/gemfiles/rails_main.gemfile.lock
+++ b/gemfiles/rails_main.gemfile.lock
@@ -1,6 +1,6 @@
GIT
remote: https://github.com/rails/rails
- revision: 0db535f88d856bcac66faee901df51aa493b639b
+ revision: c01ee683aa700b109f704a5b6611107fe2dc5476
branch: main
specs:
actioncable (8.0.0.alpha)
@@ -103,6 +103,7 @@ PATH
friendly_id (>= 5.2.0)
language_filter (>= 0.3.01)
rails (>= 4.2)
+ redcarpet (>= 3.3.4)
will_paginate (>= 3.1.0)
GEM
@@ -177,17 +178,17 @@ GEM
net-smtp (0.5.0)
net-protocol
nio4r (2.7.3)
- nokogiri (1.16.6-aarch64-linux)
+ nokogiri (1.16.7-aarch64-linux)
racc (~> 1.4)
- nokogiri (1.16.6-arm-linux)
+ nokogiri (1.16.7-arm-linux)
racc (~> 1.4)
- nokogiri (1.16.6-arm64-darwin)
+ nokogiri (1.16.7-arm64-darwin)
racc (~> 1.4)
- nokogiri (1.16.6-x86-linux)
+ nokogiri (1.16.7-x86-linux)
racc (~> 1.4)
- nokogiri (1.16.6-x86_64-darwin)
+ nokogiri (1.16.7-x86_64-darwin)
racc (~> 1.4)
- nokogiri (1.16.6-x86_64-linux)
+ nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
orm_adapter (0.5.0)
parallel (1.25.1)
@@ -218,6 +219,7 @@ GEM
rake (13.2.1)
rdoc (6.7.0)
psych (>= 4.0.0)
+ redcarpet (3.6.0)
regexp_parser (2.9.2)
reline (0.5.9)
io-console (~> 0.5)
diff --git a/lib/simple_discussion.rb b/lib/simple_discussion.rb
index 974718d..57ed634 100644
--- a/lib/simple_discussion.rb
+++ b/lib/simple_discussion.rb
@@ -13,9 +13,16 @@ module SimpleDiscussion
mattr_accessor :send_email_notifications
mattr_accessor :send_slack_notifications
mattr_accessor :profanity_filter
+ mattr_accessor :markdown_circuit_embed
+ mattr_accessor :markdown_video_embed
+ mattr_accessor :markdown_user_tagging
+
@@send_email_notifications = true
@@send_slack_notifications = true
@@profanity_filter = true
+ @@markdown_circuit_embed = true
+ @@markdown_video_embed = true
+ @@markdown_user_tagging = true
def self.setup
yield self
diff --git a/lib/simple_discussion/engine.rb b/lib/simple_discussion/engine.rb
index 5181d2c..e32ac37 100644
--- a/lib/simple_discussion/engine.rb
+++ b/lib/simple_discussion/engine.rb
@@ -6,5 +6,24 @@ class Engine < ::Rails::Engine
config.after_initialize do
SimpleDiscussion::Engine.routes.default_url_options = ActionMailer::Base.default_url_options
end
+
+ # javascripts assets precompiled for dropdown and markdown text editor
+ @@javascripts = []
+
+ initializer "simple_discussion.assets.precompile" do |app|
+ app.config.assets.precompile += [
+ "simple_discussion/application.js"
+ ]
+ end
+
+ def self.add_javascript(script)
+ @@javascripts << script
+ end
+
+ def self.javascripts
+ @@javascripts
+ end
+
+ add_javascript "simple_discussion/application.js"
end
end
diff --git a/simple_discussion.gemspec b/simple_discussion.gemspec
index 3bcc7c4..824e7db 100644
--- a/simple_discussion.gemspec
+++ b/simple_discussion.gemspec
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
spec.add_dependency "rails", ">= 4.2"
spec.add_dependency "will_paginate", ">= 3.1.0"
spec.add_dependency "language_filter", ">= 0.3.01"
+ spec.add_dependency "redcarpet", ">= 3.3.4"
spec.metadata["rubygems_mfa_required"] = "true"
end
diff --git a/test/dummy/app/helpers/application_helper.rb b/test/dummy/app/helpers/application_helper.rb
index de6be79..fb1a9b2 100644
--- a/test/dummy/app/helpers/application_helper.rb
+++ b/test/dummy/app/helpers/application_helper.rb
@@ -1,2 +1,5 @@
module ApplicationHelper
+ def user_profile_link(user)
+ "/users/#{user.id}"
+ end
end