Tooltips (всплывающие подсказки) в MikoPBX используются для предоставления контекстной помощи пользователям при работе с расширенными настройками. Система построена на базе Fomantic-UI (Semantic-UI) popup компонента и обеспечивает единообразный пользовательский опыт во всех разделах административного интерфейса.
- HTML-разметка: Иконки с классом
field-info-iconи атрибутомdata-field - JavaScript-инициализация: Метод
initializeTooltips()для привязки popup к иконкам - Генератор контента: Метод
buildTooltipContent()для создания HTML-содержимого - Переводы: Локализованные тексты в файлах переводов (
src/Common/Messages/*.php)
{
header: 'Заголовок подсказки', // Основной заголовок
description: 'Описание функции', // Общее описание
list: [ // Основной список
// Простые элементы списка
'Элемент списка 1',
'Элемент списка 2',
// Элементы с определениями
{ term: 'Термин', definition: 'Определение' },
// Заголовки секций (definition: null)
{ term: 'Заголовок секции', definition: null }
],
list2: [...], // Дополнительные списки (list2-list10)
warning: { // Предупреждение
header: 'Внимание',
text: 'Текст предупреждения'
},
examples: [ // Примеры кода/конфигурации
'[section]',
'parameter = value',
'another_param = value'
],
examplesHeader: 'Примеры', // Заголовок для примеров
note: 'Дополнительное примечание' // Финальное примечание
}<!-- Базовая иконка tooltip -->
<label>{{ t._('ex_FieldLabel') }}
<i class="small info circle icon field-info-icon"
data-field="field_name"></i>
</label>
<!-- Tooltip для checkbox -->
<div class="ui toggle checkbox">
{{ form.render('field_name') }}
<label for="field_name">{{ t._('ex_CheckboxLabel') }}
<i class="small info circle icon field-info-icon"
data-field="field_name"></i>
</label>
</div>const myForm = {
/**
* Initialize tooltips for form fields
*/
initializeTooltips() {
// Конфигурация tooltip для каждого поля
const tooltipConfigs = {
field_name: myForm.buildTooltipContent({
header: globalTranslate.field_tooltip_header,
description: globalTranslate.field_tooltip_desc,
list: [
globalTranslate.field_tooltip_item1,
{
term: globalTranslate.field_tooltip_term,
definition: globalTranslate.field_tooltip_definition
}
],
warning: {
header: globalTranslate.field_tooltip_warning_header,
text: globalTranslate.field_tooltip_warning
}
}),
// Другие поля...
};
// Инициализация popup для каждой иконки
$('.field-info-icon').each((index, element) => {
const $icon = $(element);
const fieldName = $icon.data('field');
const content = tooltipConfigs[fieldName];
if (content) {
$icon.popup({
html: content,
position: 'top right',
hoverable: true,
delay: {
show: 300,
hide: 100
},
variation: 'flowing'
});
}
});
},
/**
* Build HTML content for tooltip popup
* Используйте готовую реализацию из extension-modify.js или provider-base-modify.js
*/
buildTooltipContent(config) {
// Копируйте реализацию из существующих файлов
},
initialize() {
// ... другая инициализация
myForm.initializeTooltips();
}
};В файле переводов (src/Common/Messages/ru.php):
// Tooltips для поля field_name
'field_tooltip_header' => 'Заголовок подсказки',
'field_tooltip_desc' => 'Описание функциональности поля',
'field_tooltip_item1' => 'Элемент списка 1',
'field_tooltip_term' => 'Термин',
'field_tooltip_definition' => 'Определение термина',
'field_tooltip_warning_header' => 'Внимание',
'field_tooltip_warning' => 'Текст предупреждения о возможных последствиях',Tooltips для:
- Транспорт (sip_transport): Выбор протокола SIP с описанием каждого варианта
- Сетевой фильтр (sip_networkfilterid): Предупреждение о безопасности
- DTMF режим (sip_dtmfmode): Технические детали каждого режима
- Дополнительные атрибуты (sip_manualattributes): Примеры конфигурации
Базовый класс с универсальным методом buildTooltipContent() для:
- SIP провайдеров
- IAX провайдеров
- Общих настроек NAT и qualify
Специализированные tooltips:
- Динамическая генерация контента в зависимости от окружения
- Интеграция с ClipboardJS для копирования команд
- Показ iptables правил
- Сложные технические настройки: Параметры, требующие понимания протоколов
- Настройки безопасности: Предупреждения о последствиях изменений
- Редко используемые опции: Расширенные параметры конфигурации
- Форматы ввода: Примеры правильного заполнения полей
- Заголовок: Краткое название функции
- Описание: 1-2 предложения о назначении
- Детали: Списки опций или технические подробности
- Примеры: Конкретные примеры использования
- Предупреждения: Важная информация о безопасности или совместимости
- Используйте понятный язык, избегайте жаргона где возможно
- Предоставляйте конкретные примеры значений
- Группируйте связанную информацию в списки
- Выделяйте предупреждения оранжевым блоком
- Ограничивайте объем информации для удобства чтения
- Всегда используйте класс
field-info-iconдля иконок - Обязательно указывайте атрибут
data-fieldс именем поля - Инициализируйте tooltips после загрузки DOM
- Используйте параметр
hoverable: trueдля интерактивных подсказок - Задавайте задержки показа/скрытия для улучшения UX
Модули могут добавлять свои tooltips:
- Создайте переводы в файле модуля
- Добавьте иконки в шаблоны представлений
- Инициализируйте tooltips в JavaScript модуля
- Используйте существующий метод
buildTooltipContent()
При добавлении новых tooltips:
- Следуйте установленной структуре данных
- Добавляйте переводы только на русский язык (остальные через Weblate)
- Тестируйте отображение на разных разрешениях экрана
- Проверяйте корректность позиционирования popup
- Убедитесь в отсутствии конфликтов с другими UI элементами
Система tooltips в MikoPBX обеспечивает единообразный способ предоставления контекстной помощи пользователям. Следование данным рекомендациям гарантирует консистентность пользовательского интерфейса и улучшает общий опыт работы с системой.