From 908e7f3f1ceadca45c9319331155c66d637599a9 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Wed, 27 May 2026 17:56:54 +0300 Subject: [PATCH] =?UTF-8?q?fix(tracker):=20=D1=85=D1=83=D0=BA=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B1=D0=BE=D0=BA=D0=BE=D0=B2=D1=83=D1=8E=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C-=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=20(.tab[data-tab=3DrefN])?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chemistry-9 и physics-9 имеют ДВА навигатора: 1. .para-pill[data-para=pN] — верхние пилюли с большими карточками 2. .tab[data-tab=refN] — sidebar-справочник, тонкие строки слева Ученик кликал именно по второму (§46 Mg и ЩЗМ), но tracker ловил только первый. Маппинг ref → p по регексу. Capture-фаза, чтобы не зависеть от bubble. --- frontend/js/textbook-tracker.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontend/js/textbook-tracker.js b/frontend/js/textbook-tracker.js index 8d94a39..fc0b847 100644 --- a/frontend/js/textbook-tracker.js +++ b/frontend/js/textbook-tracker.js @@ -307,6 +307,17 @@ if (typeof window.setParaTab === 'function' && window.setParaTab.__tbPatched) clearInterval(ivl); if (++tries > 20) clearInterval(ivl); }, 100); + // Hook 4b: боковая панель-справочник в chemistry-9 / physics-9 использует + // .tab[data-tab="refN"] вместо .para-pill. Маппим ref → p и фиксируем. + document.addEventListener('click', e => { + const tab = e.target && e.target.closest && e.target.closest('.tab[data-tab]'); + if (!tab) return; + const m = String(tab.dataset.tab || '').match(/^ref(\d+)$/); + if (!m) return; + const para = 'p' + m[1]; + console.log('[tracker] клик по справ. табу', tab.dataset.tab, '→', para); + recordParaVisit(para); + }, true); // Hook 4: polling — наблюдаем за классом .active на пилюлях. // Если кто-то поменял активный параграф (через клик, через JS вызов // setParaTab, через любой механизм) — мы это поймаем за 500мс и зафиксируем.