/** * Honest countdown timer — Подготовка к школе * * Reads deadline timestamp (seconds) from .honest-timer[data-deadline]. * Finds [data-timer] children within that timer container only. * Updates (d, h, m, s) via requestAnimationFrame. Stops at 00:00:00:00. * * Поддерживает несколько таймеров на одной странице (cta-test + final-cta). * Каждый экземпляр получает собственную замыкание. * * @package Dekart */ (function () { var timers = document.querySelectorAll('.honest-timer'); if (!timers.length) return; function pad(n) { return n < 10 ? '0' + n : '' + n; } [].forEach.call(timers, function (timerEl) { var deadline = parseInt(timerEl.getAttribute('data-deadline'), 10); if (!deadline || deadline <= 0) return; var deadlineMs = deadline * 1000; var els = timerEl.querySelectorAll('[data-timer]'); if (!els.length) return; var map = {}; [].forEach.call(els, function (el) { map[el.getAttribute('data-timer')] = el; }); function tick() { var diff = deadlineMs - Date.now(); if (diff <= 0) { for (var key in map) map[key].textContent = '00'; return; } map.d.textContent = pad(Math.floor(diff / 86400000)); map.h.textContent = pad(Math.floor((diff % 86400000) / 3600000)); map.m.textContent = pad(Math.floor((diff % 3600000) / 60000)); map.s.textContent = pad(Math.floor((diff % 60000) / 1000)); requestAnimationFrame(tick); } tick(); }); })();