# Улучшения AJAX Auto-update ## Описание изменений Реализованы значительные улучшения системы AJAX auto-update для LogBoard+. ## Основные изменения ### 1. AJAX autoupdate по умолчанию включен **Изменение:** Значение `ajaxUpdateEnabled` изменено с `false` на `true` **Файл:** `templates/index.html` ```javascript // Было: let ajaxUpdateEnabled = false; // Стало: let ajaxUpdateEnabled = true; // По умолчанию включен ``` **Преимущества:** - Пользователи сразу получают автоматическое обновление логов - Не нужно вручную включать функцию при каждом запуске - Улучшенный пользовательский опыт ### 2. Добавлена кнопка Update **Новая функциональность:** Кнопка update в header для управления AJAX autoupdate **Расположение:** Справа от кнопки WebSocket состояния **Визуальные состояния:** - **Зеленая** - AJAX autoupdate включен - **Красная** - AJAX autoupdate выключен **Функциональность:** - Клик по кнопке переключает состояние AJAX autoupdate - Автоматическое обновление цвета при изменении состояния - Интуитивно понятное управление ### 3. Улучшенное управление кнопками **Логика работы:** - **AJAX autoupdate включен** → Кнопка refresh скрыта, кнопка update зеленая - **AJAX autoupdate выключен** → Кнопка refresh показана, кнопка update красная ## Техническая реализация ### CSS стили ```css /* Кнопка состояния AJAX Update */ .ajax-update-btn { background: var(--chip); color: var(--muted); border: 1px solid var(--border); border-radius: 6px; padding: 6px 12px; font-size: 11px; font-weight: 500; cursor: pointer; transition: all 0.3s ease; font-family: inherit; min-width: 60px; text-align: center; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .ajax-update-btn.ajax-on { background: #7ea855; /* Зеленый цвет */ color: white; border-color: #7ea855; } .ajax-update-btn.ajax-off { background: #f7768e; /* Красный цвет */ color: white; border-color: #f7768e; } .ajax-update-btn:hover { opacity: 0.8; transform: translateY(-1px); box-shadow: 0 2px 4px rgba(0,0,0,0.2); } ``` ### HTML структура ```html ``` ### JavaScript функции #### setAjaxUpdateState(enabled) ```javascript function setAjaxUpdateState(enabled) { if (els.ajaxUpdateBtn) { // Удаляем все классы состояний els.ajaxUpdateBtn.classList.remove('ajax-on', 'ajax-off'); // Добавляем соответствующий класс if (enabled) { els.ajaxUpdateBtn.classList.add('ajax-on'); els.ajaxUpdateBtn.textContent = 'update'; } else { els.ajaxUpdateBtn.classList.add('ajax-off'); els.ajaxUpdateBtn.textContent = 'update'; } } } ``` #### Обновленная updateRefreshButtonVisibility() ```javascript function updateRefreshButtonVisibility() { const refreshButtons = document.querySelectorAll('.log-refresh-btn'); refreshButtons.forEach(btn => { if (ajaxUpdateEnabled) { // Если ajax autoupdate включен, скрываем кнопку refresh btn.style.display = 'none'; } else { // Если ajax autoupdate выключен, показываем кнопку refresh btn.style.display = 'inline-flex'; } }); // Обновляем состояние кнопки update setAjaxUpdateState(ajaxUpdateEnabled); } ``` #### Обработчик клика ```javascript // Обработчик для кнопки update (AJAX autoupdate toggle) if (els.ajaxUpdateBtn) { els.ajaxUpdateBtn.addEventListener('click', () => { toggleAjaxLogUpdate(); }); } ``` ## Интеграция с существующим кодом ### Обновленные функции 1. **enableAjaxLogUpdate()** - обновляет состояние кнопки update 2. **disableAjaxLogUpdate()** - обновляет состояние кнопки update 3. **toggleAjaxLogUpdate()** - обновляет состояние кнопки update 4. **initAjaxUpdateCheckbox()** - устанавливает правильное начальное состояние 5. **initAjaxUpdate()** - инициализирует состояние кнопки update ### Автоматическое обновление состояния Состояние кнопки update автоматически обновляется в следующих случаях: - При инициализации AJAX update - При изменении состояния чекбокса "Auto-update logs" - При программном включении/выключении AJAX update - При переключении состояния через функцию toggleAjaxLogUpdate - При клике по кнопке update ## Преимущества реализации ### 1. Улучшенный UX - Интуитивно понятное управление AJAX autoupdate - Визуальная обратная связь о состоянии системы - Быстрый доступ к управлению через кнопку в header ### 2. Логическая связность - Кнопка refresh скрыта, когда она не нужна - Кнопка update показывает актуальное состояние - Единообразное поведение всех элементов управления ### 3. Автоматическое управление - Не требует ручного вмешательства пользователя - Состояние синхронизировано между всеми элементами - Корректная работа при всех сценариях использования ### 4. Совместимость - Работает с существующим кодом без нарушений - Поддерживает все режимы просмотра (single-view, multi-view) - Совместимо с фильтрацией и настройками уровней логирования ## Тестирование ### Сценарии тестирования 1. **Начальное состояние** - При загрузке страницы AJAX autoupdate должен быть включен - Кнопка update должна быть зеленой - Кнопка refresh должна быть скрыта 2. **Переключение через кнопку update** - Клик по кнопке update должен переключить состояние - Цвет кнопки должен измениться (зеленый ↔ красный) - Видимость кнопки refresh должна измениться 3. **Переключение через чекбокс** - Изменение состояния чекбокса "Auto-update logs" должно обновить кнопку update - Состояние должно синхронизироваться между всеми элементами 4. **Программное управление** - Вызов функций enable/disable должен обновить UI - Состояние должно корректно отображаться ## Автор Сергей Антропов Сайт: https://devops.org.ru ## Дата реализации 2024 год