46 lines
934 B
JavaScript
46 lines
934 B
JavaScript
// Fork of https://github.com/uiureo/link-text with HTML escaping disabled as we leverage
|
||
// jQuery’s escaping mechanism:
|
||
|
||
var linkify = require('linkify-it')()
|
||
|
||
function createLink (url, text, attrs) {
|
||
attrs = attrs || {}
|
||
|
||
var html = []
|
||
html.push('<a ')
|
||
html.push('href="' + url + '"')
|
||
Object.keys(attrs).forEach(function (key) {
|
||
html.push(' ' + key + '="' + attrs[key] + '"')
|
||
})
|
||
html.push('>')
|
||
html.push(decodeURIComponent(text))
|
||
html.push('</a>')
|
||
|
||
return html.join('')
|
||
}
|
||
|
||
module.exports = function (text, attrs) {
|
||
attrs = attrs || {}
|
||
|
||
var matchData = linkify.match(text) || []
|
||
|
||
var result = []
|
||
var last = 0
|
||
|
||
matchData.forEach(function (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('')
|
||
}
|