12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { regexes } from './smileys';
-
- /**
- * 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
- return smilify(linkify(body));
- }
-
-
- /**
- * Finds and replaces all links in the links in "body" with an href tag.
- *
- * @param {string} inputText - The message body.
- * @returns {string} The text replaced with HTML tags for links.
- */
- function linkify(inputText) {
- let replacedText;
-
- /* eslint-disable no-useless-escape, max-len */
-
- // URLs starting with http://, https://, or ftp://
- const replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
-
- replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>');
-
- // URLs starting with "www." (without // before it, or it'd re-link the ones done above).
- const replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
-
- replacedText = replacedText.replace(replacePattern2, '$1<a href="https://$2" target="_blank" rel="noopener noreferrer">$2</a>');
-
- // Change email addresses to mailto: links.
- const replacePattern3 = /(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/gim;
-
- replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');
-
- /* eslint-enable no-useless-escape */
-
- return replacedText;
- }
-
- /**
- * 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;
- }
|