diff --git a/frontend_tests/node_tests/linkifiers.js b/frontend_tests/node_tests/linkifiers.js index f4e90172aa..aa5491cd3c 100644 --- a/frontend_tests/node_tests/linkifiers.js +++ b/frontend_tests/node_tests/linkifiers.js @@ -7,9 +7,11 @@ const {run_test} = require("../zjsunit/test"); const blueslip = require("../zjsunit/zblueslip"); const linkifiers = zrequire("linkifiers"); -const marked = zrequire("../third/marked/lib/marked"); +const markdown = zrequire("markdown"); +const markdown_config = zrequire("markdown_config"); linkifiers.initialize([]); +markdown.initialize(markdown_config.get_helpers()); run_test("python_to_js_linkifier", () => { // The only way to reach python_to_js_linkifier is indirectly, hence the call @@ -26,7 +28,7 @@ run_test("python_to_js_linkifier", () => { id: 20, }, ]); - let actual_value = marked.InlineLexer.rules.zulip.linkifiers; + let actual_value = markdown.get_linkifier_regexes(); let expected_value = [/\/aa\/g(?!\w)/gim, /\/aa\/g(?!\w)/g]; assert.deepEqual(actual_value, expected_value); // Test case with multiple replacements. @@ -37,7 +39,7 @@ run_test("python_to_js_linkifier", () => { id: 30, }, ]); - actual_value = marked.InlineLexer.rules.zulip.linkifiers; + actual_value = markdown.get_linkifier_regexes(); expected_value = [/#cf(\d+)([A-Z][\dA-Z]*)(?!\w)/g]; assert.deepEqual(actual_value, expected_value); // Test incorrect syntax. @@ -52,7 +54,7 @@ run_test("python_to_js_linkifier", () => { id: 40, }, ]); - actual_value = marked.InlineLexer.rules.zulip.linkifiers; + actual_value = markdown.get_linkifier_regexes(); expected_value = []; assert.deepEqual(actual_value, expected_value); }); diff --git a/frontend_tests/node_tests/markdown_parse.js b/frontend_tests/node_tests/markdown_parse.js index e5b3c89a66..9fa6e200ef 100644 --- a/frontend_tests/node_tests/markdown_parse.js +++ b/frontend_tests/node_tests/markdown_parse.js @@ -154,7 +154,6 @@ function assert_parse(raw_content, expected_content) { function test(label, f) { markdown.setup(); - markdown.set_linkifier_regexes([regex]); run_test(label, f); } diff --git a/static/js/linkifiers.js b/static/js/linkifiers.js index 61e0621067..2148a63347 100644 --- a/static/js/linkifiers.js +++ b/static/js/linkifiers.js @@ -1,5 +1,4 @@ import * as blueslip from "./blueslip"; -import * as markdown from "./markdown"; const linkifier_map = new Map(); // regex -> url @@ -77,9 +76,6 @@ export function update_linkifier_rules(linkifiers) { linkifier_map.set(regex, final_url); } - - // Update our parser with our particular set of linkifiers. - markdown.set_linkifier_regexes(Array.from(linkifier_map.keys())); } export function initialize(linkifiers) { diff --git a/static/js/markdown.js b/static/js/markdown.js index 712b72531e..dd188c8ce7 100644 --- a/static/js/markdown.js +++ b/static/js/markdown.js @@ -451,10 +451,8 @@ function handleTex(tex, fullmatch) { } } -export function set_linkifier_regexes(regexes) { - // This needs to be called any time we modify our linkifier regexes, - // until we find a less clumsy way to handle this. - marked.InlineLexer.rules.zulip.linkifiers = regexes; +export function get_linkifier_regexes() { + return Array.from(helpers.get_linkifier_map().keys()); } export function setup() { @@ -577,8 +575,9 @@ export function parse({raw_content, helper_config}) { } const options = { - emojiHandler, + get_linkifier_regexes, linkifierHandler, + emojiHandler, unicodeEmojiHandler, streamHandler, streamTopicHandler, diff --git a/static/third/marked/lib/marked.js b/static/third/marked/lib/marked.js index b6c0116a10..c69fbfc3d3 100644 --- a/static/third/marked/lib/marked.js +++ b/static/third/marked/lib/marked.js @@ -484,7 +484,6 @@ var inline = { stream: noop, tex: noop, timestamp: noop, - linkifiers: [], text: /^[\s\S]+?(?=[\\]+)>/, - linkifiers: [], text: replace(inline.breaks.text) ('|', '|(\ud83c[\udd00-\udfff]|\ud83d[\udc00-\ude4f]|' + '\ud83d[\ude80-\udeff]|\ud83e[\udd00-\uddff]|' + @@ -647,8 +645,10 @@ InlineLexer.prototype.output = function(src) { // linkifier (Zulip) var self = this; - this.rules.linkifiers.forEach(function (linkifier) { - var ret = self.inlineReplacement(linkifier, src, function(regex, groups, match) { + + const regexes = this.options.get_linkifier_regexes ? this.options.get_linkifier_regexes() : []; + regexes.forEach(function (regex) { + var ret = self.inlineReplacement(regex, src, function(regex, groups, match) { // Insert the created URL href = self.linkifier(regex, groups, match); if (href !== undefined) {