diff --git a/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 b/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 index 2e3ba250b91..6ffa5092572 100644 --- a/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 +++ b/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 @@ -213,7 +213,7 @@ export function setup(opts, siteSettings, state) { html: true, breaks: opts.discourse.features.newline, xhtmlOut: false, - linkify: true, + linkify: opts.discourse.features.linkify, typographer: siteSettings.enable_markdown_typographer }); diff --git a/app/assets/javascripts/pretty-text/engines/discourse-markdown/code.js.es6 b/app/assets/javascripts/pretty-text/engines/discourse-markdown/code.js.es6 index 47e222b1748..a8def62ce27 100644 --- a/app/assets/javascripts/pretty-text/engines/discourse-markdown/code.js.es6 +++ b/app/assets/javascripts/pretty-text/engines/discourse-markdown/code.js.es6 @@ -13,7 +13,7 @@ function render(tokens, idx, options, env, slf, md) { if (info) { // strip off any additional languages - info = info.split(/\s+/g)[0]; + info = info.trim().split(/\s+/g)[0]; } const acceptableCodeClasses = md.options.discourse.acceptableCodeClasses; @@ -23,7 +23,7 @@ function render(tokens, idx, options, env, slf, md) { className = TEXT_CODE_CLASSES.indexOf(info) !== -1 ? 'lang-nohighlight' : 'lang-' + langName; - return `
${escapedContent}
\n`;
+ return `${escapedContent}
\n`;
}
export function setup(helper) {
diff --git a/app/assets/javascripts/pretty-text/pretty-text.js.es6 b/app/assets/javascripts/pretty-text/pretty-text.js.es6
index 3859fde27e8..21708cbe211 100644
--- a/app/assets/javascripts/pretty-text/pretty-text.js.es6
+++ b/app/assets/javascripts/pretty-text/pretty-text.js.es6
@@ -21,7 +21,8 @@ export function buildOptions(state) {
lookupAvatarByPostNumber,
emojiUnicodeReplacer,
lookupInlineOnebox,
- previewing
+ previewing,
+ linkify
} = state;
let features = {
@@ -33,6 +34,7 @@ export function buildOptions(state) {
'html': true,
'category-hashtag': true,
'onebox': true,
+ 'linkify': linkify !== false,
'newline': !siteSettings.traditional_markdown_linebreaks
};
diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb
index 50131970efa..69e60f1bed7 100644
--- a/lib/pretty_text.rb
+++ b/lib/pretty_text.rb
@@ -165,6 +165,7 @@ module PrettyText
__optInput.customEmoji = #{custom_emoji.to_json};
__optInput.emojiUnicodeReplacer = __emojiUnicodeReplacer;
__optInput.lookupInlineOnebox = __lookupInlineOnebox;
+ #{opts[:linkify] == false ? "__optInput.linkify = false;": ""}
JS
if opts[:topicId]
diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb
index 4fe3d0f28a6..9f587060f6c 100644
--- a/spec/components/pretty_text_spec.rb
+++ b/spec/components/pretty_text_spec.rb
@@ -215,9 +215,12 @@ describe PrettyText do
end
it 'can include code class correctly' do
+ # keep in mind spaces should be trimmed per spec
+ expect(PrettyText.cook("``` ruby the mooby\n`````")).to eq('
')
expect(PrettyText.cook("```cpp\ncpp\n```")).to match_html("cpp\n
")
expect(PrettyText.cook("```\ncpp\n```")).to match_html("cpp\n
")
expect(PrettyText.cook("```text\ncpp\n```")).to match_html("cpp\n
")
+
end
it 'indents code correctly' do
@@ -966,69 +969,4 @@ HTML
end
end
- # work in progress
- skip 'passes commonmark spec' do
-
- SiteSetting.traditional_markdown_linebreaks = true
-
- html,state,md = nil
- failed = 0
-
- File.readlines(Rails.root + 'spec/fixtures/md/spec.txt').each do |line|
- if line == "```````````````````````````````` example\n"
- state = :example
- next
- end
-
- if line == "````````````````````````````````\n"
- md.gsub!('→', "\t")
- html ||= ''
- html.gsub!('→', "\t")
- html.strip!
-
- # normalize brs
- html.gsub!('\n", "") - - unless cooked == html - failed += 1 - puts "FAILED SPEC" - puts "Expected: " - puts html - puts "Got: " - puts cooked - puts "Markdown: " - puts md - puts - end - html,state,md = nil - next - end - - if state == :example && line == ".\n" - state = :html - next - end - - if state == :example - md = (md || "") << line - end - - if state == :html - html = (html || "") << line - end - - - end - - expect(failed).to eq(0) - end end diff --git a/spec/integrity/common_mark_spec.rb b/spec/integrity/common_mark_spec.rb new file mode 100644 index 00000000000..9d2427d8426 --- /dev/null +++ b/spec/integrity/common_mark_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true +require 'rails_helper' + +describe "CommonMark" do + it 'passes spec' do + + SiteSetting.traditional_markdown_linebreaks = true + SiteSetting.enable_markdown_typographer = false + + html,state,md = nil + failed = 0 + + File.readlines(Rails.root + 'spec/fixtures/md/spec.txt').each do |line| + if line == "```````````````````````````````` example\n" + state = :example + next + end + + if line == "````````````````````````````````\n" + md.gsub!('→', "\t") + html ||= String.new + html.gsub!('→', "\t") + html.strip! + + # normalize brs + html.gsub!('
\n", "") + html.gsub!("
\n", "") + html.gsub!("language-ruby", "lang-ruby") + # strip out unsupported languages + html.gsub!(/ class="language-[;f].*"/, "") + + unless cooked == html + failed += 1 + puts "FAILED SPEC" + puts "Expected: " + puts html + puts "Got: " + puts cooked + puts "Markdown: " + puts md + puts + end + html,state,md = nil + next + end + + if state == :example && line == ".\n" + state = :html + next + end + + if state == :example + md = (md || String.new) << line + end + + if state == :html + html = (html || String.new) << line + end + + + end + + expect(failed).to eq(0) + end +end