feat(reader): add PDF reading support with outline chapters, CLI blocks, and noise filtering (task 7)
This commit is contained in:
1 parent
c38b1dae0a
commit
6dcfd59f73
67 files changed
+49444
-40
No files matched your search
@@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
|
||||
<title>Notes — Персональный тренажер и словарь английского языка</title>
|
||||
<meta name="description" content="Защищённый персональный тренажёр и словарь английского языка с интервальными повторениями SRS SM-2, контекстным поиском и озвучкой">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=3.7">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=3.8">
|
||||
|
||||
<!-- PWA meta and icons -->
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
@@ -534,8 +534,8 @@
|
||||
<div class="bookshelf-actions">
|
||||
<button id="add-text-btn" class="btn btn-outline">✏️ Вставить текст</button>
|
||||
<label for="book-file-input" class="btn btn-primary file-upload-label">
|
||||
📁 Загрузить EPUB / TXT
|
||||
<input type="file" id="book-file-input" accept=".epub,.txt,.md" style="display: none;">
|
||||
📁 Загрузить EPUB / PDF / TXT
|
||||
<input type="file" id="book-file-input" accept=".epub,.pdf,.txt,.md" style="display: none;">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@@ -544,7 +544,7 @@
|
||||
<div id="bookshelf-empty" class="empty-state hidden">
|
||||
<div class="empty-icon">📖</div>
|
||||
<h3>Ваша библиотека пуста</h3>
|
||||
<p>Загрузите книгу в формате EPUB, текстовый файл TXT/MD или вставьте текст статьи, чтобы начать интерактивное чтение.</p>
|
||||
<p>Загрузите книгу в формате EPUB или PDF, текстовый файл TXT/MD или вставьте текст статьи, чтобы начать интерактивное чтение.</p>
|
||||
</div>
|
||||
<div id="bookshelf-grid" class="bookshelf-grid"></div>
|
||||
</div>
|
||||
@@ -1075,7 +1075,7 @@
|
||||
<!-- Audio Element for native streaming -->
|
||||
<audio id="global-audio-player" preload="none"></audio>
|
||||
|
||||
<script src="/static/js/app.js?v=3.7"></script>
|
||||
<script src="/static/js/app.js?v=3.8"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -2077,12 +2077,12 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
card.innerHTML = `
|
||||
<div>
|
||||
<div class="book-card-top">
|
||||
<div class="book-cover-icon">${b.source_type === 'epub' ? '📕' : '📄'}</div>
|
||||
<div class="book-cover-icon">${b.source_type === 'epub' ? '📕' : (b.source_type === 'pdf' ? '📑' : '📄')}</div>
|
||||
<div class="book-card-info">
|
||||
<h4 class="book-card-title" title="${escapeHtml(b.title)}">${escapeHtml(b.title)}</h4>
|
||||
<p class="book-card-author">${escapeHtml(b.author || 'Неизвестный автор')}</p>
|
||||
<div class="book-card-badges">
|
||||
<span class="badge-format">${escapeHtml(b.source_type)}</span>
|
||||
<span class="badge-format">${escapeHtml((b.source_type || 'text').toUpperCase())}</span>
|
||||
<span class="badge-words">${b.total_words ? b.total_words.toLocaleString() + ' слов' : ''}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user