From 63be950e5fb5070fe2ab884bbeb792818e689a0c Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Thu, 5 Sep 2013 17:03:35 -0400 Subject: [PATCH] FIX: Quotes inside a list --- .../discourse/dialects/bold_italics_dialect.js | 15 --------------- .../discourse/dialects/fix_simple_quotes.js | 16 ++++++++++++++++ .../javascripts/external/better_markdown.js | 4 +++- test/javascripts/components/markdown_test.js | 6 ++++++ 4 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 app/assets/javascripts/discourse/dialects/fix_simple_quotes.js diff --git a/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js b/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js index 7cea70c8485..40bf4098ea3 100644 --- a/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js +++ b/app/assets/javascripts/discourse/dialects/bold_italics_dialect.js @@ -25,18 +25,3 @@ replaceMarkdown('*', 'em'); replaceMarkdown('_', 'em'); -// There's a weird issue with the markdown parser where it won't process simple blockquotes -// when they are prefixed with spaces. This fixes it. -Discourse.Dialect.on("register", function(event) { - var dialect = event.dialect, - MD = event.MD; - - dialect.block["fix_simple_quotes"] = function(block, next) { - var m = /^ +(\>[\s\S]*)/.exec(block); - if (m && m[1] && m[1].length) { - next.unshift(MD.mk_block(m[1])); - return []; - } - }; - -}); \ No newline at end of file diff --git a/app/assets/javascripts/discourse/dialects/fix_simple_quotes.js b/app/assets/javascripts/discourse/dialects/fix_simple_quotes.js new file mode 100644 index 00000000000..581d9e5bd49 --- /dev/null +++ b/app/assets/javascripts/discourse/dialects/fix_simple_quotes.js @@ -0,0 +1,16 @@ +// There's a weird issue with the markdown parser where it won't process simple blockquotes +// when they are prefixed with spaces. This fixes it. +Discourse.Dialect.on("register", function(event) { + var dialect = event.dialect, + MD = event.MD; + + dialect.block["fix_simple_quotes"] = function(block, next) { + var m = /(^|\n) +(\>[\s\S]*)/.exec(block); + if (m && m[2] && m[2].length) { + var blockContents = block.replace(/(^|\n) +\>/, "$1>"); + next.unshift(blockContents); + return []; + } + }; + +}); \ No newline at end of file diff --git a/app/assets/javascripts/external/better_markdown.js b/app/assets/javascripts/external/better_markdown.js index df990510644..71bda524f13 100644 --- a/app/assets/javascripts/external/better_markdown.js +++ b/app/assets/javascripts/external/better_markdown.js @@ -691,7 +691,8 @@ Markdown.dialects.Gruber = { var next_block = next[0] && next[0].valueOf() || ""; - if ( next_block.match(is_list_re) || next_block.match( /^ / ) ) { + + if ( next_block.match(is_list_re) || (next_block.match(/^ /) && (!next_block.match(/^ *\>/))) ) { block = next.shift(); // Check for an HR following a list: features/lists/hr_abutting @@ -711,6 +712,7 @@ Markdown.dialects.Gruber = { break; } // loose_search + return ret; }; })(), diff --git a/test/javascripts/components/markdown_test.js b/test/javascripts/components/markdown_test.js index 9f53d070582..f9425009e3f 100644 --- a/test/javascripts/components/markdown_test.js +++ b/test/javascripts/components/markdown_test.js @@ -119,6 +119,12 @@ test("simple quotes", function() { cooked("> level 1\n> > level 2", "

level 1

level 2

", "it allows nesting of blockquotes with spaces"); + + cooked("- hello\n\n > world\n > eviltrout", + "\n\n

world
eviltrout

", + "it allows quotes within a list."); + cooked(" > indent 1\n > indent 2", "

indent 1
indent 2

", "allow multiple spaces to indent"); + }); test("Quotes", function() {