Add support for web links

This commit is contained in:
Paul Frazee 2022-11-18 13:59:17 -06:00
parent 9d13e05dbf
commit 6e2b7a0b90
4 changed files with 67 additions and 30 deletions

View file

@ -63,19 +63,36 @@ export function extractEntities(
): Entity[] | undefined {
let match
let ents: Entity[] = []
const re = /(^|\s)(@)([a-zA-Z0-9\.-]+)(\b)/dg
while ((match = re.exec(text))) {
if (knownHandles && !knownHandles.has(match[3])) {
continue // not a known handle
{
// mentions
const re = /(^|\s)(@)([a-zA-Z0-9\.-]+)(\b)/dg
while ((match = re.exec(text))) {
if (knownHandles && !knownHandles.has(match[3])) {
continue // not a known handle
}
ents.push({
type: 'mention',
value: match[3],
index: {
start: match.indices[2][0], // skip the (^|\s) but include the '@'
end: match.indices[3][1],
},
})
}
}
{
// links
const re = /(^|\s)(https?:\/\/[\S]+)(\b)/dg
while ((match = re.exec(text))) {
ents.push({
type: 'link',
value: match[2],
index: {
start: match.indices[1][0], // skip the (^|\s) but include the '@'
end: match.indices[2][1],
},
})
}
ents.push({
type: 'mention',
value: match[3],
index: {
start: match.indices[2][0], // skip the (^|\s) but include the '@'
end: match.indices[3][1],
},
})
}
return ents.length > 0 ? ents : undefined
}