|
|
|
@ -42,6 +42,14 @@ const isLinkMisleading = (link) => { |
|
|
|
|
const linkText = linkTextParts.join(''); |
|
|
|
|
const targetURL = new URL(link.href); |
|
|
|
|
|
|
|
|
|
if (targetURL.protocol === 'magnet:') { |
|
|
|
|
return !linkText.startsWith('magnet:'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (targetURL.protocol === 'xmpp:') { |
|
|
|
|
return !(linkText === targetURL.href || 'xmpp:' + linkText === targetURL.href); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// The following may not work with international domain names
|
|
|
|
|
if (textMatchesTarget(linkText, targetURL.origin, targetURL.host) || textMatchesTarget(linkText.toLowerCase(), targetURL.origin, targetURL.host)) { |
|
|
|
|
return false; |
|
|
|
@ -120,9 +128,19 @@ export default class StatusContent extends React.PureComponent { |
|
|
|
|
if (tagLinks && isLinkMisleading(link)) { |
|
|
|
|
// Add a tag besides the link to display its origin
|
|
|
|
|
|
|
|
|
|
const url = new URL(link.href); |
|
|
|
|
const tag = document.createElement('span'); |
|
|
|
|
tag.classList.add('link-origin-tag'); |
|
|
|
|
tag.textContent = `[${new URL(link.href).host}]`; |
|
|
|
|
switch (url.protocol) { |
|
|
|
|
case 'xmpp:': |
|
|
|
|
tag.textContent = `[${url.href}]`; |
|
|
|
|
break; |
|
|
|
|
case 'magnet:': |
|
|
|
|
tag.textContent = '(magnet)'; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
tag.textContent = `[${url.host}]`; |
|
|
|
|
} |
|
|
|
|
link.insertAdjacentText('beforeend', ' '); |
|
|
|
|
link.insertAdjacentElement('beforeend', tag); |
|
|
|
|
} |
|
|
|
|