diff --git a/src/components/ArticleExportMenu/ArticleExportMenu.tsx b/src/components/ArticleExportMenu/ArticleExportMenu.tsx new file mode 100644 index 0000000..78e38ca --- /dev/null +++ b/src/components/ArticleExportMenu/ArticleExportMenu.tsx @@ -0,0 +1,162 @@ +import { Button } from '@/components/ui/button' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu' +import { MoreVertical, FileDown } from 'lucide-react' +import { contentParserService } from '@/services/content-parser.service' +import logger from '@/lib/logger' +import { Event } from 'nostr-tools' + +interface ArticleExportMenuProps { + event: Event + title: string +} + +export default function ArticleExportMenu({ event, title }: ArticleExportMenuProps) { + const exportArticle = async (format: 'pdf' | 'epub' | 'latex' | 'adoc' | 'html') => { + try { + const content = event.content + const filename = `${title}.${format}` + + let blob: Blob = new Blob(['']) + + if (format === 'adoc') { + // Export raw AsciiDoc content + blob = new Blob([content], { type: 'text/plain' }) + } else if (format === 'html') { + // Parse the AsciiDoc content to HTML + const parsedContent = await contentParserService.parseContent(content, { + eventKind: event.kind, + enableMath: true, + enableSyntaxHighlighting: true + }) + + const htmlDocument = ` + +
+ +