diff --git a/dev-dist/sw.js b/dev-dist/sw.js index d3e568e..278d092 100644 --- a/dev-dist/sw.js +++ b/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-9dc17825'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "/index.html", - "revision": "0.3mraah3n9jg" + "revision": "0.6dag44kodlo" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("/index.html"), { diff --git a/src/App.tsx b/src/App.tsx index 9b7c16e..6d6a875 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -19,7 +19,12 @@ const AppContent: React.FC = () => { <> - + } /> } /> diff --git a/src/utils/markdown.ts b/src/utils/markdown.ts index ce2c9b8..409690f 100644 --- a/src/utils/markdown.ts +++ b/src/utils/markdown.ts @@ -56,14 +56,69 @@ renderer.listitem = function(token: any) { const tokens = token.tokens || []; let text: string; - // Используем this.parser.parseInline для обработки токенов (this указывает на renderer) + // Блоковые типы токенов, которые нельзя обрабатывать через parseInline + const blockTypes = ['list', 'blockquote', 'code', 'heading', 'paragraph', 'hr', 'table']; + + // Обрабатываем токены вручную, избегая parseInline для блоковых элементов if (tokens.length > 0) { try { - text = this.parser.parseInline(tokens); + // Разделяем токены на inline и блоковые + const inlineTokens: any[] = []; + const blockTokens: any[] = []; + + tokens.forEach((t: any) => { + if (blockTypes.includes(t.type)) { + blockTokens.push(t); + } else { + inlineTokens.push(t); + } + }); + + // Обрабатываем inline токены только если они есть + let inlineText = ''; + if (inlineTokens.length > 0) { + try { + inlineText = this.parser.parseInline(inlineTokens); + } catch (inlineError) { + // Если ошибка при обработке inline, просто игнорируем их + console.warn('Error parsing inline tokens in listitem:', inlineError); + } + } + + // Обрабатываем блоковые токены через parser + let blockText = ''; + if (blockTokens.length > 0) { + try { + blockText = this.parser.parse(blockTokens); + } catch (blockError) { + // Если ошибка при обработке блоков, обрабатываем через стандартный renderer + console.warn('Error parsing block tokens in listitem:', blockError); + // Пытаемся обработать каждый блок отдельно + blockText = blockTokens.map((bt: any) => { + try { + return this.parser.parse([bt]); + } catch { + return ''; + } + }).join(''); + } + } + + text = inlineText + blockText; + + // Если после обработки текст пустой, используем fallback + if (!text || text.trim() === '') { + text = token.text || ''; + } } catch (error) { - // Если ошибка, используем fallback - console.warn('Error parsing list item tokens:', error); - text = token.text || ''; + // Если общая ошибка, используем fallback - обрабатываем через стандартный parser + try { + text = this.parser.parse(tokens); + } catch (parseError) { + // Последний fallback - используем raw text + console.warn('Error parsing list item tokens:', parseError); + text = token.text || token.raw || ''; + } } } else { text = token.text || '';