From 5e50c4624feeccd97d02c20e0c0f95d24aef9d61 Mon Sep 17 00:00:00 2001 From: Robin Ward <robin.ward@gmail.com> Date: Thu, 22 Aug 2013 13:46:51 -0400 Subject: [PATCH] FIX: New lines in code blocks were somewhat unpredictable --- .../discourse/dialects/github_code_dialect.js | 11 ++++++++--- test/javascripts/components/markdown_test.js | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/discourse/dialects/github_code_dialect.js b/app/assets/javascripts/discourse/dialects/github_code_dialect.js index 425194dfb..ffa747e58 100644 --- a/app/assets/javascripts/discourse/dialects/github_code_dialect.js +++ b/app/assets/javascripts/discourse/dialects/github_code_dialect.js @@ -42,15 +42,19 @@ Discourse.Dialect.on("register", function(event) { if (m[2]) { next.unshift(MD.mk_block(m[2], null, lineNumber + 1)); } + lineNumber++; while (next.length > 0) { var b = next.shift(), - n = b.match(/([^`]*)```([^`]*)/m), - diff = ((typeof b.lineNumber === "undefined") ? lineNumber : b.lineNumber) - lineNumber; + blockLine = b.lineNumber, + diff = ((typeof blockLine === "undefined") ? lineNumber : blockLine) - lineNumber; + + b = b.replace(/ {2}\n/g, "\n"); + var n = b.match(/([^`]*)```([^`]*)/m); - lineNumber = b.lineNumber; for (var i=1; i<diff; i++) { codeContents.push(""); } + lineNumber = blockLine + b.split("\n").length - 1; if (n) { if (n[2]) { @@ -63,6 +67,7 @@ Discourse.Dialect.on("register", function(event) { codeContents.push(b); } } + result.push(['p', ['pre', ['code', {'class': m[1] || 'lang-auto'}, codeContents.join("\n") ]]]); return result; } diff --git a/test/javascripts/components/markdown_test.js b/test/javascripts/components/markdown_test.js index b4757545d..fa2a6d531 100644 --- a/test/javascripts/components/markdown_test.js +++ b/test/javascripts/components/markdown_test.js @@ -168,6 +168,10 @@ test("Oneboxing", function() { test("Code Blocks", function() { + cooked("```\na\nb\nc\n\nd\n```", + "<p><pre><code class=\"lang-auto\">a\nb\nc\n\nd</code></pre></p>", + "it treats new lines properly"); + cooked("```\ntest\n```", "<p><pre><code class=\"lang-auto\">test</code></pre></p>", "it supports basic code blocks");