import states from './states'; function handleContentLinks(opts) { const { mentions = [], instance, previewMode } = opts || {}; return (e) => { let { target } = e; target = target.closest('a'); if (!target) return; const prevText = target.previousSibling?.textContent; const textBeforeLinkIsAt = prevText?.endsWith('@'); if (target.classList.contains('u-url') || textBeforeLinkIsAt) { const targetText = ( target.querySelector('span') || target ).innerText.trim(); const username = targetText.replace(/^@/, ''); const url = target.getAttribute('href'); const mention = mentions.find( (mention) => mention.username === username || mention.acct === username || mention.url === url, ); if (mention) { e.preventDefault(); e.stopPropagation(); states.showAccount = { account: mention.acct, instance, }; } else if (!/^http/i.test(targetText)) { console.log('mention not found', targetText); e.preventDefault(); e.stopPropagation(); const href = target.getAttribute('href'); states.showAccount = { account: href, instance, }; } } else if (!previewMode) { const textBeforeLinkIsHash = prevText?.endsWith('#'); if (target.classList.contains('hashtag') || textBeforeLinkIsHash) { e.preventDefault(); e.stopPropagation(); const tag = target.innerText.replace(/^#/, '').trim(); const hashURL = instance ? `#/${instance}/t/${tag}` : `#/t/${tag}`; console.log({ hashURL }); location.hash = hashURL; } else if (states.unfurledLinks[target.href]?.url) { e.preventDefault(); e.stopPropagation(); states.prevLocation = { pathname: location.hash.replace(/^#/, ''), }; location.hash = `#${states.unfurledLinks[target.href].url}`; } } }; } export default handleContentLinks;