diff options
author | Thibaut Girka <thib@sitedethib.com> | 2020-01-26 15:26:03 +0100 |
---|---|---|
committer | ThibG <thib@sitedethib.com> | 2020-01-28 20:25:56 +0100 |
commit | cf5b7698571f283361460bb7bd420496949e86fb (patch) | |
tree | d65efc43c8016391ac63c5e9b7a40bac1de11b2b | |
parent | abe2cc489bf421b5bfdf9d804104bb5ba2d1faa6 (diff) |
Add support for xmpp: and magnet: URIs to misleading link detection code
-rw-r--r-- | app/javascript/flavours/glitch/components/status_content.js | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/app/javascript/flavours/glitch/components/status_content.js b/app/javascript/flavours/glitch/components/status_content.js index 2c79de4db..a5822866a 100644 --- a/app/javascript/flavours/glitch/components/status_content.js +++ b/app/javascript/flavours/glitch/components/status_content.js @@ -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); } |