You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/js/modules/link_text.js

40 lines
876 B
JavaScript

// Fork of https://github.com/uiureo/link-text with HTML escaping disabled as we leverage
// jQuerys escaping mechanism:
const linkify = require('linkify-it')();
function createLink(url, text, attrs = {}) {
const html = [];
html.push('<a ');
html.push(`href="${url}"`);
Object.keys(attrs).forEach(key => {
html.push(` ${key}="${attrs[key]}"`);
});
html.push('>');
html.push(decodeURIComponent(text));
html.push('</a>');
return html.join('');
}
module.exports = (text, attrs = {}) => {
const matchData = linkify.match(text) || [];
const result = [];
let last = 0;
matchData.forEach(match => {
if (last < match.index) {
result.push(text.slice(last, match.index));
}
result.push(createLink(match.url, match.text, attrs));
last = match.lastIndex;
});
result.push(text.slice(last));
return result.join('');
};