- Добавлена кнопка Update для управления AJAX auto-update - AJAX auto-update включен по умолчанию - Улучшено управление видимостью кнопки Refresh - Переупорядочены кнопки в header (Update, Refresh) - Унифицированы стили кнопок (высота, шрифт, границы) - Добавлен hover эффект для кнопки options с цветом warning - Позиционирование help-btn в свернутом sidebar - Уменьшена ширина свернутого sidebar на 30% - Добавлена логика разворачивания sidebar при клике на options - Отображение внешнего порта в статусе контейнера - Показ 'standalone' для контейнеров без проекта - Обновлена документация Автор: Сергей Антропов Сайт: https://devops.org.ru
8.2 KiB
8.2 KiB
Улучшения AJAX Auto-update
Описание изменений
Реализованы значительные улучшения системы AJAX auto-update для LogBoard+.
Основные изменения
1. AJAX autoupdate по умолчанию включен
Изменение: Значение ajaxUpdateEnabled
изменено с false
на true
Файл: templates/index.html
// Было:
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 стили
/* Кнопка состояния 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 структура
<button id="wsstate" class="ws-status-btn">ws: off</button>
<button id="ajaxUpdateBtn" class="ajax-update-btn" title="AJAX Auto-update">update</button>
<button class="btn btn-small log-refresh-btn" title="Обновить логи и счетчики">
<i class="fas fa-sync-alt"></i> Refresh
</button>
JavaScript функции
setAjaxUpdateState(enabled)
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()
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);
}
Обработчик клика
// Обработчик для кнопки update (AJAX autoupdate toggle)
if (els.ajaxUpdateBtn) {
els.ajaxUpdateBtn.addEventListener('click', () => {
toggleAjaxLogUpdate();
});
}
Интеграция с существующим кодом
Обновленные функции
- enableAjaxLogUpdate() - обновляет состояние кнопки update
- disableAjaxLogUpdate() - обновляет состояние кнопки update
- toggleAjaxLogUpdate() - обновляет состояние кнопки update
- initAjaxUpdateCheckbox() - устанавливает правильное начальное состояние
- 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)
- Совместимо с фильтрацией и настройками уровней логирования
Тестирование
Сценарии тестирования
-
Начальное состояние
- При загрузке страницы AJAX autoupdate должен быть включен
- Кнопка update должна быть зеленой
- Кнопка refresh должна быть скрыта
-
Переключение через кнопку update
- Клик по кнопке update должен переключить состояние
- Цвет кнопки должен измениться (зеленый ↔ красный)
- Видимость кнопки refresh должна измениться
-
Переключение через чекбокс
- Изменение состояния чекбокса "Auto-update logs" должно обновить кнопку update
- Состояние должно синхронизироваться между всеми элементами
-
Программное управление
- Вызов функций enable/disable должен обновить UI
- Состояние должно корректно отображаться
Автор
Сергей Антропов
Сайт: https://devops.org.ru
Дата реализации
2024 год