feat(reader): implement FEAT-01 Focus Zen Mode (100% vh/vw, auto-hiding HUD, hotkeys F/Esc, native fullscreen)

This commit is contained in:
Antigravity committed 2026-10-08 10:45:09 +03:00
1 parent 9bbc9473de
commit f10965eff5
13 files changed
+3157 -792

No files matched your search

+63 -1
View File
@@ -5,7 +5,7 @@
// =======================================================================
import { api } from './api.js';
import { showToast, escapeHtml } from './ui.js';
import { showToast, escapeHtml, renderMarkdownTable, renderMarkdownNotes } from './ui.js';
let allUnits = [];
let currentFilter = 'all';
@@ -29,6 +29,18 @@ export function initGrammar() {
const sumUnitsBtn = document.getElementById('grammar-sum-units-btn');
const sumSrsBtn = document.getElementById('grammar-sum-srs-btn');
const handwrittenToggle = document.getElementById('grammar-handwritten-toggle');
const cheatsheetToggle = document.getElementById('grammar-practice-cheatsheet-toggle');
const cheatsheetDrawer = document.getElementById('grammar-practice-cheatsheet-drawer');
if (cheatsheetToggle && cheatsheetDrawer) {
cheatsheetToggle.addEventListener('click', () => {
const isNowHidden = !cheatsheetDrawer.classList.contains('hidden');
cheatsheetDrawer.classList.toggle('hidden', isNowHidden);
cheatsheetToggle.innerHTML = isNowHidden
? '<span>📋 Шпаргалка по теме</span><i class="ph-caret-down"></i>'
: '<span>📋 Скрыть шпаргалку</span><i class="ph-caret-up"></i>';
});
}
if (backBtn) {
backBtn.addEventListener('click', () => {
@@ -314,6 +326,50 @@ function renderUnitTheory() {
handwrittenToggle.checked = Boolean(currentUnit.handwritten_logged);
}
// Cheatsheet Markdown Table
const cheatsheetSec = document.getElementById('grammar-cheatsheet-section');
const cheatsheetBox = document.getElementById('grammar-cheatsheet-content');
if (cheatsheetSec && cheatsheetBox) {
if (currentUnit.cheatsheet_table && currentUnit.cheatsheet_table.trim()) {
cheatsheetBox.innerHTML = renderMarkdownTable(currentUnit.cheatsheet_table);
cheatsheetSec.classList.remove('hidden');
} else {
cheatsheetBox.innerHTML = '';
cheatsheetSec.classList.add('hidden');
}
}
// Detailed Murphy Notes
const notesSec = document.getElementById('grammar-detailed-notes-section');
const notesBox = document.getElementById('grammar-detailed-notes-content');
if (notesSec && notesBox) {
if (currentUnit.detailed_notes && currentUnit.detailed_notes.trim()) {
notesBox.innerHTML = renderMarkdownNotes(currentUnit.detailed_notes);
notesSec.classList.remove('hidden');
} else {
notesBox.innerHTML = '';
notesSec.classList.add('hidden');
}
}
// Practice Cheatsheet Drawer content
const practiceDrawer = document.getElementById('grammar-practice-cheatsheet-drawer');
const practiceToggleWrap = document.querySelector('.practice-cheatsheet-toggle-wrap');
if (practiceDrawer && practiceToggleWrap) {
if (currentUnit.cheatsheet_table && currentUnit.cheatsheet_table.trim()) {
practiceDrawer.innerHTML = renderMarkdownTable(currentUnit.cheatsheet_table);
practiceToggleWrap.classList.remove('hidden');
} else {
practiceDrawer.innerHTML = '';
practiceToggleWrap.classList.add('hidden');
}
practiceDrawer.classList.add('hidden');
const practiceToggle = document.getElementById('grammar-practice-cheatsheet-toggle');
if (practiceToggle) {
practiceToggle.innerHTML = '<span>📋 Шпаргалка по теме</span><i class="ph-caret-down"></i>';
}
}
// Golden formula
const formulaEl = document.getElementById('grammar-golden-formula-text');
if (formulaEl) {
@@ -368,6 +424,12 @@ function startUnitPractice() {
sessionCorrect = 0;
sessionIngestedCards = [];
// Ensure cheatsheet drawer is collapsed at practice start
const practiceDrawer = document.getElementById('grammar-practice-cheatsheet-drawer');
const practiceToggle = document.getElementById('grammar-practice-cheatsheet-toggle');
if (practiceDrawer) practiceDrawer.classList.add('hidden');
if (practiceToggle) practiceToggle.innerHTML = '<span>📋 Шпаргалка по теме</span><i class="ph-caret-down"></i>';
renderExercise();
}