Removed extra handling of markdown links when doing autolinking
Этот коммит содержится в:
@@ -19,13 +19,9 @@ const marked = require('marked');
|
|||||||
// - emoticons - Enables emoticon parsing. Defaults to true.
|
// - emoticons - Enables emoticon parsing. Defaults to true.
|
||||||
// - markdown - Enables markdown parsing. Defaults to true.
|
// - markdown - Enables markdown parsing. Defaults to true.
|
||||||
export function formatText(text, options = {}) {
|
export function formatText(text, options = {}) {
|
||||||
if (!('markdown' in options)) {
|
|
||||||
options.markdown = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
let output;
|
let output;
|
||||||
|
|
||||||
if (options.markdown) {
|
if (!('markdown' in options) || options.markdown) {
|
||||||
// the markdown renderer will call doFormatText as necessary so just call marked
|
// the markdown renderer will call doFormatText as necessary so just call marked
|
||||||
output = marked(text, {
|
output = marked(text, {
|
||||||
renderer: new Markdown.MattermostMarkdownRenderer(null, options),
|
renderer: new Markdown.MattermostMarkdownRenderer(null, options),
|
||||||
@@ -44,13 +40,14 @@ export function formatText(text, options = {}) {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Performs most of the actual formatting work for formatText. Not intended to be called normally.
|
||||||
export function doFormatText(text, options) {
|
export function doFormatText(text, options) {
|
||||||
let output = text;
|
let output = text;
|
||||||
|
|
||||||
const tokens = new Map();
|
const tokens = new Map();
|
||||||
|
|
||||||
// replace important words and phrases with tokens
|
// replace important words and phrases with tokens
|
||||||
output = autolinkUrls(output, tokens, !!options.markdown);
|
output = autolinkUrls(output, tokens);
|
||||||
output = autolinkAtMentions(output, tokens);
|
output = autolinkAtMentions(output, tokens);
|
||||||
output = autolinkHashtags(output, tokens);
|
output = autolinkHashtags(output, tokens);
|
||||||
|
|
||||||
@@ -85,7 +82,7 @@ export function sanitizeHtml(text) {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
function autolinkUrls(text, tokens, markdown) {
|
function autolinkUrls(text, tokens) {
|
||||||
function replaceUrlWithToken(autolinker, match) {
|
function replaceUrlWithToken(autolinker, match) {
|
||||||
const linkText = match.getMatchedText();
|
const linkText = match.getMatchedText();
|
||||||
let url = linkText;
|
let url = linkText;
|
||||||
@@ -115,30 +112,7 @@ function autolinkUrls(text, tokens, markdown) {
|
|||||||
replaceFn: replaceUrlWithToken
|
replaceFn: replaceUrlWithToken
|
||||||
});
|
});
|
||||||
|
|
||||||
let output = text;
|
return autolinker.link(text);
|
||||||
|
|
||||||
// temporarily replace markdown links if markdown is enabled so that we don't accidentally parse them twice
|
|
||||||
const markdownLinkTokens = new Map();
|
|
||||||
if (markdown) {
|
|
||||||
function replaceMarkdownLinkWithToken(markdownLink) {
|
|
||||||
const index = markdownLinkTokens.size;
|
|
||||||
const alias = `MM_MARKDOWNLINK${index}`;
|
|
||||||
|
|
||||||
markdownLinkTokens.set(alias, {value: markdownLink});
|
|
||||||
|
|
||||||
return alias;
|
|
||||||
}
|
|
||||||
|
|
||||||
output = output.replace(/\]\([^\)]*\)/g, replaceMarkdownLinkWithToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
output = autolinker.link(output);
|
|
||||||
|
|
||||||
if (markdown) {
|
|
||||||
output = replaceTokens(output, markdownLinkTokens);
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function autolinkAtMentions(text, tokens) {
|
function autolinkAtMentions(text, tokens) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user