diff --git a/src/components/ContentPanel.tsx b/src/components/ContentPanel.tsx index b5e064f0..369c3311 100644 --- a/src/components/ContentPanel.tsx +++ b/src/components/ContentPanel.tsx @@ -218,9 +218,15 @@ const ContentPanel: React.FC = ({ relays: relayHints }) + // Check for source URL in 'r' tags + const sourceUrl = currentArticle.tags.find(t => t[0] === 'r')?.[1] + return { portal: getNostrUrl(naddr), - native: `nostr:${naddr}` + native: `nostr:${naddr}`, + naddr, + sourceUrl, + borisUrl: `${window.location.origin}/a/${naddr}` } } @@ -245,6 +251,44 @@ const ContentPanel: React.FC = ({ } setShowArticleMenu(false) } + + const handleShareBoris = async () => { + try { + if (!articleLinks) return + + if ((navigator as { share?: (d: { title?: string; url?: string }) => Promise }).share) { + await (navigator as { share: (d: { title?: string; url?: string }) => Promise }).share({ + title: title || 'Article', + url: articleLinks.borisUrl + }) + } else { + await navigator.clipboard.writeText(articleLinks.borisUrl) + } + } catch (e) { + console.warn('Share failed', e) + } finally { + setShowArticleMenu(false) + } + } + + const handleShareOriginal = async () => { + try { + if (!articleLinks?.sourceUrl) return + + if ((navigator as { share?: (d: { title?: string; url?: string }) => Promise }).share) { + await (navigator as { share: (d: { title?: string; url?: string }) => Promise }).share({ + title: title || 'Article', + url: articleLinks.sourceUrl + }) + } else { + await navigator.clipboard.writeText(articleLinks.sourceUrl) + } + } catch (e) { + console.warn('Share failed', e) + } finally { + setShowArticleMenu(false) + } + } // Video actions const handleOpenVideoExternal = () => { @@ -624,6 +668,22 @@ const ContentPanel: React.FC = ({ {showArticleMenu && (
+ + {articleLinks.sourceUrl && ( + + )}