From cc6f360660e3bc2bfd0824e72864931e182a39b1 Mon Sep 17 00:00:00 2001 From: Gustavo Pereira Date: Wed, 9 Oct 2019 09:52:33 -0300 Subject: [PATCH] [FIX] Emoji are rendered in URL (#15516) --- app/autolinker/client/client.js | 54 ++++++++++++++------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/app/autolinker/client/client.js b/app/autolinker/client/client.js index 486cb90dbb1..e743725b67e 100644 --- a/app/autolinker/client/client.js +++ b/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'); });