diff --git a/app/assets/javascripts/discourse/components/markdown.js b/app/assets/javascripts/discourse/components/markdown.js index 599dce085a5..7ceee45a0d7 100644 --- a/app/assets/javascripts/discourse/components/markdown.js +++ b/app/assets/javascripts/discourse/components/markdown.js @@ -143,8 +143,8 @@ Discourse.Markdown = { if (!text) return ""; // don't do @username mentions inside
or blocks
- text = text.replace(/<(pre|code)>([\s\S]*?@[\s\S]*?)<\/(pre|code)>/gi, function(wholeMatch, m1, m2, m3) {
- return "<" + m1 + ">" + (m2.replace(/@/g, '@')) + "" + m3 + ">";
+ text = text.replace(/<(pre|code)>([\s\S](?!<(pre|code)>))*?@([\s\S](?!<(pre|code)>))*?<\/(pre|code)>/gi, function(m) {
+ return m.replace(/@/g, '@');
});
// add @username mentions, if valid; must be bounded on left and right by non-word characters
diff --git a/spec/javascripts/components/markdown_spec.js b/spec/javascripts/components/markdown_spec.js
index 4a05274962e..948000573a9 100644
--- a/spec/javascripts/components/markdown_spec.js
+++ b/spec/javascripts/components/markdown_spec.js
@@ -92,6 +92,14 @@ describe("Discourse.Markdown", function() {
expect(cook("@EvilTrout yo")).toBe("@EvilTrout yo
");
});
+ it("doesn't do @username mentions inside or blocks", function() {
+ expect(cook("`@EvilTrout yo`")).toBe("@EvilTrout yo
");
+ });
+
+ it("deals correctly with multiple blocks", function() {
+ expect(cook("`evil` @EvilTrout `trout`")).toBe("evil
@EvilTrout trout
");
+ });
+
});
describe("Oneboxing", function() {