Подробные комментарии ко всем JS-файлам фронтенда

This commit is contained in:
2026-07-31 17:25:44 +04:00
parent 0783319fd1
commit c50aaf59d8
17 changed files with 1155 additions and 196 deletions
+26 -7
View File
@@ -1,28 +1,47 @@
// snackbar.js — лёгкие уведомления (без зависимостей)
// showSnackbar(msg, type='info') — type: info, success, error
// snackbar.js — лёгкие toast-уведомления (без зависимостей)
//
// Использование: showSnackbar('Сообщение', 'success')
// Типы: 'info' (по умолчанию), 'success', 'error'
//
// Поведение:
// - Показывается в правом нижнем углу (position: fixed)
// - Автоматически исчезает: info/success через 4с, error через 8с
// - Клик по уведомлению — мгновенное закрытие
// - Максимум 4 уведомления одновременно (старые удаляются)
/**
* Показать snackbar-уведомление.
*
* @param {string} msg — текст уведомления
* @param {string} type — 'info' | 'success' | 'error' (по умолчанию 'info')
*/
function showSnackbar(msg, type) {
type = type || 'info';
// Найти или создать контейнер для всех уведомлений
let container = document.getElementById('snackbar-container');
if (!container) {
container = document.createElement('div');
container.id = 'snackbar-container';
container.className = 'snackbar-container';
container.setAttribute('role', 'status');
container.setAttribute('aria-live', 'polite');
container.setAttribute('role', 'status'); // accessibility
container.setAttribute('aria-live', 'polite'); // screen-reader зачитает
document.body.appendChild(container);
}
// Создать элемент уведомления
const el = document.createElement('div');
el.className = 'snackbar ' + type;
el.textContent = msg;
// Клик — закрыть
el.onclick = function() { el.remove(); };
container.appendChild(el);
// Limit stacking
// Ограничение: максимум 4 уведомления
const all = container.querySelectorAll('.snackbar');
if (all.length > 4) all[0].remove();
if (all.length > 4) all[0].remove(); // удаляем самое старое
// Auto-hide: info/success 4s, error 8s
// Автоматическое скрытие: error — 8 секунд, остальные — 4
const delay = (type === 'error') ? 8000 : 4000;
setTimeout(function() {
if (el.parentNode) el.remove();