[FIX] Emoji are rendered in URL (#15516)

pull/15544/head
Gustavo Pereira 6 years ago committed by Guilherme Gazzo
parent c382831b22
commit cc6f360660
  1. 54
      app/autolinker/client/client.js

@ -1,33 +1,17 @@
import { Meteor } from 'meteor/meteor';
import { Random } from 'meteor/random';
import { Tracker } from 'meteor/tracker';
import s from 'underscore.string';
import Autolinker from 'autolinker';
import { settings } from '../../settings';
import { callbacks } from '../../callbacks';
const createAutolinker = () => {
const regUrls = new RegExp(settings.get('AutoLinker_UrlsRegExp'));
const replaceAutolinkerMatch = (match) => {
if (match.getType() !== 'url') {
return null;
}
if (!regUrls.test(match.matchedText)) {
return null;
}
if (match.matchedText.indexOf(Meteor.absoluteUrl()) === 0) {
const tag = match.buildTag();
tag.setAttr('target', '');
return tag;
}
let config;
return true;
};
return new Autolinker({
Tracker.autorun(function() {
config = {
stripPrefix: settings.get('AutoLinker_StripPrefix'),
urls: {
schemeMatches: settings.get('AutoLinker_Urls_Scheme'),
@ -38,14 +22,7 @@ const createAutolinker = () => {
phone: settings.get('AutoLinker_Phone'),
twitter: false,
stripTrailingSlash: false,
replaceFn: replaceAutolinkerMatch,
});
};
let autolinker;
Tracker.autorun(() => {
autolinker = createAutolinker();
};
});
const renderMessage = (message) => {
@ -67,8 +44,22 @@ const renderMessage = (message) => {
if (regexTokens && regexTokens.test(msgPart)) {
return msgPart;
}
return Autolinker.link(msgPart, {
...config,
replaceFn: (match) => {
const token = `=!=${ Random.id() }=!=`;
const tag = match.buildTag();
if (~match.matchedText.indexOf(Meteor.absoluteUrl())) {
tag.setAttr('target', '');
}
return autolinker.link(msgPart);
message.tokens.push({
token,
text: tag.toAnchorString(),
});
return token;
} });
})
.join('');
@ -79,5 +70,6 @@ Tracker.autorun(function() {
if (settings.get('AutoLinker') !== true) {
return callbacks.remove('renderMessage', 'autolinker');
}
callbacks.add('renderMessage', renderMessage, callbacks.priority.LOW, 'autolinker');
callbacks.add('renderMessage', renderMessage, callbacks.priority.MEDIUM, 'autolinker');
});

Loading…
Cancel
Save