Merge pull request #1213 from mattermost/plt-836
PLT-836 Prevent markdown styled links from embedding gifs
Этот коммит содержится в:
@@ -297,7 +297,7 @@ export default class PostBody extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let embed;
|
let embed;
|
||||||
if (filenames.length === 0 && this.state.links) {
|
if (filenames.length === 0 && this.state.links && this.state.links.length > 0) {
|
||||||
embed = this.createEmbed(this.state.links[0]);
|
embed = this.createEmbed(this.state.links[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -231,46 +231,62 @@ export function getTimestamp() {
|
|||||||
return Date.now();
|
return Date.now();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testUrlMatch(text) {
|
// extracts links not styled by Markdown
|
||||||
var urlMatcher = new Autolinker.matchParser.MatchParser({
|
export function extractLinks(text) {
|
||||||
|
const urlMatcher = new Autolinker.matchParser.MatchParser({
|
||||||
urls: true,
|
urls: true,
|
||||||
emails: false,
|
emails: false,
|
||||||
twitter: false,
|
twitter: false,
|
||||||
phone: false,
|
phone: false,
|
||||||
hashtag: false
|
hashtag: false
|
||||||
});
|
});
|
||||||
var result = [];
|
const links = [];
|
||||||
function replaceFn(match) {
|
let replaceText = text;
|
||||||
var linkData = {};
|
|
||||||
var matchText = match.getMatchedText();
|
|
||||||
|
|
||||||
linkData.text = matchText;
|
// pull out the Markdown code blocks
|
||||||
if (matchText.trim().indexOf('http') === 0) {
|
const codeBlocks = [];
|
||||||
linkData.link = matchText;
|
const splitText = replaceText.split('`'); // also handles ```
|
||||||
} else {
|
for (let i = 1; i < splitText.length; i += 2) {
|
||||||
linkData.link = 'http://' + matchText;
|
if (splitText[i].trim() !== '') {
|
||||||
|
codeBlocks.push(splitText[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceFn(match) {
|
||||||
|
let link = '';
|
||||||
|
const matchText = match.getMatchedText();
|
||||||
|
const tempText = replaceText;
|
||||||
|
|
||||||
|
const start = replaceText.indexOf(matchText);
|
||||||
|
const end = start + matchText.length;
|
||||||
|
|
||||||
|
replaceText = replaceText.substring(0, start) + replaceText.substring(end);
|
||||||
|
|
||||||
|
// if it's a Markdown link, just skip it
|
||||||
|
if (start > 1) {
|
||||||
|
if (tempText.charAt(start - 2) === ']' && tempText.charAt(start - 1) === '(' && tempText.charAt(end) === ')') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result.push(linkData);
|
// if it's in a Markdown code block, skip it
|
||||||
|
for (const i in codeBlocks) {
|
||||||
|
if (codeBlocks[i].indexOf(matchText) === 0) {
|
||||||
|
codeBlocks[i] = codeBlocks[i].replace(matchText, '');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matchText.trim().indexOf('http') === 0) {
|
||||||
|
link = matchText;
|
||||||
|
} else {
|
||||||
|
link = 'http://' + matchText;
|
||||||
|
}
|
||||||
|
|
||||||
|
links.push(link);
|
||||||
}
|
}
|
||||||
urlMatcher.replace(text, replaceFn, this);
|
urlMatcher.replace(text, replaceFn, this);
|
||||||
return result;
|
return {links, text};
|
||||||
}
|
|
||||||
|
|
||||||
export function extractLinks(text) {
|
|
||||||
var repRegex = new RegExp('<br>', 'g');
|
|
||||||
var matches = testUrlMatch(text.replace(repRegex, '\n'));
|
|
||||||
|
|
||||||
if (!matches.length) {
|
|
||||||
return {links: null, text: text};
|
|
||||||
}
|
|
||||||
|
|
||||||
var links = [];
|
|
||||||
for (var i = 0; i < matches.length; i++) {
|
|
||||||
links.push(matches[i].link);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {links: links, text: text};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function escapeRegExp(string) {
|
export function escapeRegExp(string) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user