1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import { regexes } from './smileys';
-
- /* eslint-disable no-useless-escape, max-len */
- const replacePatterns = {
-
- // URLs starting with http://, https://, or ftp://
- '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>':
- /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim,
-
- // URLs starting with "www." (without // before it, or it'd re-link the ones done above).
- '$1<a href="https://$2" target="_blank" rel="noopener noreferrer">$2</a>':
- /(^|[^\/])(www\.[\S]+(\b|$))/gim,
-
- // Change email addresses to mailto: links.
- '<a href="mailto:$1">$1</a>':
- /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim
- };
- /* eslint-enable no-useless-escape, max-len */
-
- /**
- * Processes links and smileys in "body".
- *
- * @param {string} body - The message body.
- * @returns {string} Message body with image tags and href tags.
- */
- export function processReplacements(body) {
- // make links clickable + add smileys
-
- // non of the patterns we search contains a space, that's why we tokenize it
- // and after processing each token we join it again with the results
- // making sure we do only one replacement for a token
- const tokens = body.split(' ');
- const resultText = [];
-
- for (const token of tokens) {
- let replacedText;
- const tokenLength = token.length;
-
- for (const newString in replacePatterns) { // eslint-disable-line guard-for-in, max-len
- const replacePattern = replacePatterns[newString];
-
- replacedText = token.replace(replacePattern, newString);
-
- // replacement was done, stop doing any other replacements
- if (replacedText.length > tokenLength) {
- break;
- }
- replacedText = null;
- }
-
- // no replacement was done, then just check for smiley
- if (!replacedText) {
- replacedText = smilify(token);
- }
-
- resultText.push(replacedText);
- }
-
- return resultText.join(' ');
- }
-
- /**
- * Replaces common smiley strings with images.
- *
- * @param {string} body - The message body.
- * @returns {string} Body returned with smiley replaced.
- */
- function smilify(body) {
- if (!body) {
- return body;
- }
-
- let formattedBody = body;
-
- for (const smiley in regexes) {
- if (regexes.hasOwnProperty(smiley)) {
- formattedBody = formattedBody.replace(regexes[smiley],
- `<img class="smiley" src="images/smileys/${smiley}.svg">`);
- }
- }
-
- return formattedBody;
- }
|