Browse Source

article redirect

imwald
Silberengel 4 months ago
parent
commit
6b81bab02b
  1. 13
      src/components/Note/MarkdownArticle/MarkdownArticle.tsx
  2. 12
      src/services/content-parser.service.ts

13
src/components/Note/MarkdownArticle/MarkdownArticle.tsx

@ -42,8 +42,19 @@ export default function MarkdownArticle({ @@ -42,8 +42,19 @@ export default function MarkdownArticle({
const contentRef = useRef<HTMLDivElement>(null)
// Preprocess content to convert plain media URLs to markdown syntax
// Also convert "Read naddr... instead." patterns to hyperlinks
const processedContent = useMemo(() => {
return preprocessMediaLinks(event.content)
let content = preprocessMediaLinks(event.content)
// Convert "Read naddr... instead." patterns to markdown links for replaceable events
// This is a standard format for forwarding readers to referred events (e.g., in wikis)
const redirectRegex = /Read (naddr1[a-z0-9]+) instead\./gi
content = content.replace(redirectRegex, (match, naddr) => {
const href = toNote(naddr)
return `Read [${naddr}](${href}) instead.`
})
return content
}, [event.content])
// Use unified media extraction service

12
src/services/content-parser.service.ts

@ -85,11 +85,21 @@ class ContentParserService { @@ -85,11 +85,21 @@ class ContentParserService {
// Check for LaTeX math
const hasMath = enableMath && this.hasMathContent(content)
// Preprocess content: Convert "Read naddr... instead." patterns to hyperlinks
// This is a standard format for forwarding readers to referred events (e.g., in wikis)
let preprocessedContent = content
const redirectRegex = /Read (naddr1[a-z0-9]+) instead\./gi
preprocessedContent = preprocessedContent.replace(redirectRegex, (_match, naddr) => {
// Convert to AsciiDoc link format pointing to the note page
// Use a regular HTTP link format that will be processed as a normal link
return `Read link:/notes/${naddr}[${naddr}] instead.`
})
let html = ''
try {
// Convert everything to AsciiDoc format and process as AsciiDoc
const asciidocContent = this.convertToAsciidoc(content, markupType)
const asciidocContent = this.convertToAsciidoc(preprocessedContent, markupType)
html = await this.parseAsciidoc(asciidocContent, { enableMath, enableSyntaxHighlighting })
} catch (error) {
logger.error('Content parsing error', { error })

Loading…
Cancel
Save