|
|
|
|
@ -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'); |
|
|
|
|
}); |
|
|
|
|
|