Добавлены новые параметры для компонента BrowserRouter в App.tsx для поддержки будущих функций. Обновлена логика обработки токенов в markdown.ts для улучшения обработки блоковых и инлайн элементов, включая обработку ошибок и использование fallback для пустого текста.

This commit is contained in:
Fovway 2025-11-04 11:12:38 +07:00
parent a78d976bcf
commit 4b3bc3e024
3 changed files with 67 additions and 7 deletions

View File

@ -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"), {

View File

@ -19,7 +19,12 @@ const AppContent: React.FC = () => {
<>
<NotificationStack />
<InstallPrompt />
<BrowserRouter>
<BrowserRouter
future={{
v7_startTransition: true,
v7_relativeSplatPath: true,
}}
>
<Routes>
<Route path="/" element={<LoginPage />} />
<Route path="/register" element={<RegisterPage />} />

View File

@ -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 || '';