Add support for xmpp: and magnet: URIs to misleading link detection code
This commit is contained in:
		@@ -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);
 | 
			
		||||
          }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user