diff --git a/src/app/daily/components/views/createModal.tsx b/src/app/daily/components/views/createModal.tsx
index 1495383c..a3204d63 100644
--- a/src/app/daily/components/views/createModal.tsx
+++ b/src/app/daily/components/views/createModal.tsx
@@ -1,15 +1,16 @@
import CancelIcon from '@lume/shared/icons/cancel';
import PlusIcon from '@lume/shared/icons/plus';
-import { getNoteAuthors } from '@lume/utils/storage';
+//import { getNoteAuthors } from '@lume/utils/storage';
import { Dialog, Transition } from '@headlessui/react';
import { Fragment, useState } from 'react';
-import useSWR from 'swr';
-const fetcher = () => getNoteAuthors();
+//import useSWR from 'swr';
+
+//const fetcher = () => getNoteAuthors();
export const CreateViewModal = () => {
- const { data, error }: any = useSWR('authors', fetcher);
+ //const { data, error }: any = useSWR('authors', fetcher);
const [isOpen, setIsOpen] = useState(false);
const closeModal = () => {
@@ -80,10 +81,7 @@ export const CreateViewModal = () => {
-
- {error && <>failed to fetch>}
- {!data ? <>loading...> : data.map((author) =>
{author.pubkey}
)}
-
+
diff --git a/src/app/note/components/content.tsx b/src/app/note/components/content.tsx
index cc9d41c7..0a3e7f1c 100644
--- a/src/app/note/components/content.tsx
+++ b/src/app/note/components/content.tsx
@@ -1,6 +1,5 @@
import ImagePreview from '@lume/app/note/components/preview/image';
import VideoPreview from '@lume/app/note/components/preview/video';
-import { NoteQuote } from '@lume/app/note/components/quote';
import { NoteMentionUser } from '@lume/app/note/components/user/mention';
import ReactMarkdown from 'react-markdown';
@@ -14,9 +13,7 @@ export const NoteContent = ({ content }: { content: any }) => {
linkTarget="_blank"
className="prose prose-zinc max-w-none select-text break-words dark:prose-invert prose-p:text-[15px] prose-p:leading-tight prose-a:text-[15px] prose-a:leading-tight prose-a:text-fuchsia-500 prose-a:no-underline hover:prose-a:text-fuchsia-600 hover:prose-a:underline prose-ol:mb-1 prose-ul:mb-1 prose-li:text-[15px] prose-li:leading-tight"
components={{
- h5: ({ ...props }) => ,
- h6: ({ ...props }) => ,
- em: ({ ...props }) => ,
+ em: ({ ...props }) => ,
}}
>
{content.parsed}
diff --git a/src/app/note/components/user/mention.tsx b/src/app/note/components/user/mention.tsx
index 044b652a..1e33449f 100644
--- a/src/app/note/components/user/mention.tsx
+++ b/src/app/note/components/user/mention.tsx
@@ -1,7 +1,8 @@
import { useProfile } from '@lume/utils/hooks/useProfile';
import { shortenKey } from '@lume/utils/shortenKey';
-export const NoteMentionUser = ({ pubkey }: { pubkey: string }) => {
+export const NoteMentionUser = (props: { children: any[] }) => {
+ const pubkey = props.children[0];
const { user } = useProfile(pubkey);
return @{user?.username || user?.name || shortenKey(pubkey)};
diff --git a/src/utils/parser.tsx b/src/utils/parser.tsx
index c6279b7a..83c595fc 100644
--- a/src/utils/parser.tsx
+++ b/src/utils/parser.tsx
@@ -1,4 +1,4 @@
-import { Event } from 'nostr-tools';
+import { Event, parseReferences } from 'nostr-tools';
const getURLs = new RegExp(
'(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal|wss|ws):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))',
@@ -6,6 +6,7 @@ const getURLs = new RegExp(
);
export const noteParser = (event: Event) => {
+ const references = parseReferences(event);
const content: { original: string; parsed: any; notes: string[]; images: string[]; videos: string[] } = {
original: event.content,
parsed: event.content,
@@ -23,30 +24,33 @@ export const noteParser = (event: Event) => {
// image url
content.images.push(url);
// remove url from original content
- content.parsed = content.parsed.toString().replace(url, '');
+ content.parsed = content.parsed.replace(url, '');
} else if (url.match(/\.(mp4|webm|mov)$/i)) {
// video
content.videos.push(url);
// remove url from original content
- content.parsed = content.parsed.toString().replace(url, '');
+ content.parsed = content.parsed.replace(url, '');
}
});
- // extract note mention
- content.original.match(/^(nostr:)?(note1|nevent1).*$/gm)?.forEach((item) => {
- content.notes.push(item);
- // remove url from original content
- content.parsed = content.parsed.toString().replace(item, '');
- });
-
// map hashtag to em
content.original.match(/#(\w+)(?!:\/\/)/gi)?.forEach((item) => {
- content.parsed = content.parsed.replace(item, `*${item}*`);
+ content.parsed = content.parsed.replace(item, `[${item}](https://snort.social/search/#${item})`);
});
- // map profile mention to h6 (markdown)
- content.original.match(/^(nostr:)?(nprofile1|npub1).*$/gm)?.forEach((item) => {
- content.parsed = content.parsed.replace(item, `###### ${item}`);
+ // handle nostr mention
+ references.forEach((item) => {
+ const profile = item.profile;
+ const event = item.event;
+
+ if (event) {
+ content.notes.push(event.id);
+ content.parsed = content.parsed.replace(item.text, '');
+ }
+
+ if (profile) {
+ content.parsed = content.parsed.replace(item.text, `*${profile.pubkey}*`);
+ }
});
return content;