feat(listening): interactive listening comprehension trainer with neural voiceover and auto-evaluation

This commit is contained in:
Antigravity committed 2026-10-07 10:57:10 +03:00
1 parent a6fb4349e9
commit 7893b353aa
8 files changed
+1026 -3

No files matched your search

+92 -1
View File
@@ -233,7 +233,8 @@
<button class="srs-tab" data-mode="quiz">🎯 4 Варианта</button>
<button class="srs-tab" data-mode="typing">✍️ Набор слова</button>
<button class="srs-tab" data-mode="cloze">🧩 Пропуски</button>
<button class="srs-tab" data-mode="dictation" style="display: none;">🎧 Диктант</button>
<button class="srs-tab" data-mode="dictation">🎧 Диктант</button>
<button class="srs-tab" data-mode="listening">📻 Аудирование</button>
</div>
</div>
@@ -492,6 +493,96 @@
</div>
</div>
<!-- MODE 6: Listening Comprehension Q&A -->
<div id="srs-mode-listening" class="srs-mode-container hidden">
<div class="trainer-card listening-card">
<div class="trainer-header listening-header-row">
<div class="listening-tag-wrap">
<span class="mode-tag">📻 Аудирование & Вопросы</span>
<span id="listening-level-badge" class="level-badge badge-b1">B1</span>
<span id="listening-topic-badge" class="topic-badge">Tech</span>
</div>
<div class="listening-filters">
<select id="listening-topic-select" class="select-styled select-xs" title="Выбрать тему">
<option value="all">🌐 Все темы</option>
<option value="tech">💻 Технологии & IT</option>
<option value="daily">☕ Повседневная жизнь</option>
<option value="travel">✈️ Путешествия</option>
<option value="science">🔬 Наука</option>
<option value="business">💼 Работа & Бизнес</option>
<option value="cards">📚 Мои слова из словаря</option>
</select>
<select id="listening-speed-select" class="select-styled select-xs" title="Скорость речи">
<option value="1.0">⚡ 1.0x</option>
<option value="0.75">🐢 0.75x</option>
<option value="1.25">🚀 1.25x</option>
</select>
<button type="button" id="listening-new-scenario-btn" class="btn btn-xs btn-outline" title="Загрузить другую ситуацию">
🔄 Другая история
</button>
</div>
</div>
<div class="listening-hero">
<div class="listening-title-box">
<h3 id="listening-title" class="listening-scenario-title">Загрузка аудио-ситуации...</h3>
<p class="listening-subtitle">Прослушайте аудио на английском и ответьте на вопрос диктора</p>
</div>
<div class="listening-audio-controls">
<div class="audio-control-card">
<div class="audio-control-label">1. Аудио-история (контекст):</div>
<button type="button" id="listening-play-story-btn" class="btn btn-primary btn-md listening-play-btn">
🔊 Слушать историю <span class="kbd-sub"><kbd>Space</kbd></span>
</button>
</div>
<div class="audio-control-card">
<div class="audio-control-label">2. Вопрос от диктора:</div>
<button type="button" id="listening-play-question-btn" class="btn btn-outline btn-md listening-play-btn">
❓ Слушать вопрос
</button>
</div>
</div>
</div>
<div class="listening-hint-bar">
<button type="button" id="listening-toggle-hint-btn" class="btn btn-xs btn-ghost">💡 Подсказка к вопросу</button>
<span id="listening-hint-text" class="listening-hint-text hidden"></span>
</div>
<form id="listening-form" class="trainer-form listening-form">
<div class="input-action-row">
<input type="text" id="listening-input" class="input-styled input-hero" placeholder="Напишите ответ на английском по услышанному..." autocomplete="off" spellcheck="false" autofocus>
<button type="submit" id="listening-submit-btn" class="btn btn-primary">Проверить ответ</button>
</div>
</form>
<div id="listening-feedback-box" class="trainer-feedback-box hidden"></div>
<div id="listening-revealed-box" class="listening-revealed-card hidden">
<div class="revealed-section">
<span class="revealed-label">🎯 Образцовый ответ:</span>
<strong id="listening-ideal-answer" class="revealed-val text-success"></strong>
</div>
<div class="revealed-section">
<span class="revealed-label">📖 Вопрос (текст):</span>
<p id="listening-revealed-question" class="revealed-text"></p>
<small id="listening-revealed-question-ru" class="text-muted"></small>
</div>
<div class="revealed-section">
<span class="revealed-label">📜 Полный текст истории:</span>
<p id="listening-revealed-story" class="revealed-text"></p>
<small id="listening-revealed-story-ru" class="text-muted"></small>
</div>
<div class="listening-next-bar">
<button type="button" id="listening-next-btn" class="btn btn-primary btn-md">
Следующая ситуация ➔ <span class="kbd-sub"><kbd>Enter</kbd></span>
</button>
</div>
</div>
</div>
</div>
<!-- Session Complete Summary Screen -->
<div id="srs-summary" class="srs-summary-card hidden">
<div class="summary-trophy">🏆</div>