# Улучшения 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 год