8.6 KiB
Отладка контекстного меню сообщений
Обзор
В файл backend/static/js/components/messageContextMenu.js добавлена подробная отладка для всех методов, которые обновляют DOM.
Добавленные логи
1. Инициализация и подключение к сообщениям
Constructor:
[MessageContextMenu] Constructor called- вызов конструктора с конфигом
attachToExistingMessages():
[MessageContextMenu] Attaching to existing messages in: {containerId}- начало поиска существующих сообщений[MessageContextMenu] Found X messages- количество найденных сообщений
observeNewMessages():
[MessageContextMenu] Setting up MutationObserver- установка наблюдателя[MessageContextMenu] New message detected: {messageId}- обнаружено новое сообщение[MessageContextMenu] New message in batch: {messageId}- сообщения в пакете (загрузка истории)
attachToMessage():
[MessageContextMenu] attachToMessage called:+ детали (messageId, authorId, isOwn, alreadyAttached)[MessageContextMenu] Contextmenu listener attached to message: {messageId}- обработчик правого клика подключен[MessageContextMenu] All event listeners attached to message: {messageId}- все обработчики подключены
2. События пользователя
Правый клик (contextmenu):
[MessageContextMenu] *** CONTEXTMENU EVENT FIRED ***- сработал правый клик[MessageContextMenu] Event details:+ координаты, target, messageId
Touch события (мобилка):
[MessageContextMenu] Touchstart event on message: {messageId}- начало касания[MessageContextMenu] Long press triggered on message: {messageId}- долгое нажатие сработало[MessageContextMenu] Touch moved, cancelling long press- палец двигается, отмена[MessageContextMenu] Touch ended- касание завершено[MessageContextMenu] Touch cancelled- касание отменено
3. Создание и показ меню
showMenu():
[MessageContextMenu] showMenu called:+ детали (messageId, isOwn, координаты)[MessageContextMenu] Creating menu...- создание меню[MessageContextMenu] Menu created, appending to body- меню создано[MessageContextMenu] Menu appended to DOM- меню добавлено в DOM[MessageContextMenu] Adding highlight to message- добавление подсветки[MessageContextMenu] Positioning menu- позиционирование[MessageContextMenu] Adding show class for animation- анимация появления
createMenu():
[MessageContextMenu] createMenu:+ (messageId, isOwn)[MessageContextMenu] Menu element created with class: {className}[MessageContextMenu] Creating reactions HTML with X emojis[MessageContextMenu] Setting innerHTML...[MessageContextMenu] innerHTML set successfully[MessageContextMenu] Attaching click handler to menu[MessageContextMenu] Click outside action button- клик не по кнопке[MessageContextMenu] Action button clicked: {action} {emoji}- клик по кнопке[MessageContextMenu] Menu fully constructed
positionMenu():
[MessageContextMenu] positionMenu called:+ координаты[MessageContextMenu] Menu dimensions:+ размеры и viewport[MessageContextMenu] Adjusted left to prevent overflow- корректировка позиции[MessageContextMenu] Adjusted top to prevent bottom overflow- корректировка[MessageContextMenu] Final position:+ финальные координаты
4. Действия с сообщениями
handleReply():
[MessageContextMenu] handleReply called[MessageContextMenu] Bubble not found in message element- warning[MessageContextMenu] Reply data:+ (messageId, authorName, messageTextLength)[MessageContextMenu] Using chatFormManager.setModeToReply[MessageContextMenu] chatFormManager not available, using fallback- warning[MessageContextMenu] Textarea #id_content not found- error
handleEdit():
[MessageContextMenu] handleEdit called[MessageContextMenu] Bubble not found in message element- warning[MessageContextMenu] Edit data:+ (messageId, messageTextLength)[MessageContextMenu] Using chatFormManager.setModeToEdit[MessageContextMenu] chatFormManager not available, using fallback- warning[MessageContextMenu] Textarea #id_content not found- error
5. Закрытие и очистка
removeHighlight():
[MessageContextMenu] Removing highlight from message: {messageId}- удаление подсветки[MessageContextMenu] Highlight removed- подсветка удалена[MessageContextMenu] No highlighted message to remove- нечего удалять
closeMenu():
[MessageContextMenu] closeMenu: no active menu- нет активного меню[MessageContextMenu] Closing menu- закрытие меню[MessageContextMenu] Removing show class for fade out- анимация скрытия[MessageContextMenu] Removing menu from DOM- удаление из DOM
showToast():
[MessageContextMenu] showToast: {message}- показ уведомления[MessageContextMenu] Toast created, appending to body- toast создан[MessageContextMenu] Adding show class to toast- анимация появления[MessageContextMenu] Removing show class from toast- анимация скрытия[MessageContextMenu] Removing toast from DOM- удаление toast
Как использовать для диагностики
Проблема: Контекстное меню не появляется
-
Откройте DevTools Console
-
Обновите страницу чата
-
Проверьте логи инициализации:
[MessageContextMenu] Constructor called [MessageContextMenu] Found X messages [MessageContextMenu] Setting up MutationObserver -
Кликните правой кнопкой по сообщению
-
Должны появиться логи:
[MessageContextMenu] *** CONTEXTMENU EVENT FIRED *** [MessageContextMenu] Event details: {...} [MessageContextMenu] showMenu called: {...} -
Если лог
CONTEXTMENU EVENT FIREDне появляется - проблема в подключении обработчиков -
Если появляется, но меню не показывается - проблема в создании/позиционировании
Проблема: Меню не подключается к новым сообщениям
-
Отправьте новое сообщение
-
Должны появиться логи:
[MessageContextMenu] New message detected: {messageId} [MessageContextMenu] attachToMessage called: {...} [MessageContextMenu] All event listeners attached to message: {messageId} -
Если логи не появляются - MutationObserver не сработал
-
Проверьте, что контейнер
#chatScrollсуществует
Проблема: Действия (Reply/Edit) не работают
-
Кликните правой кнопкой по сообщению
-
Выберите "Ответить" или "Редактировать"
-
Проверьте логи:
[MessageContextMenu] Action button clicked: reply [MessageContextMenu] handleReply called [MessageContextMenu] Using chatFormManager.setModeToReply -
Если видите
chatFormManager not available, using fallback- модуль не инициализирован -
Проверьте, что
window.chatFormManagerдоступен
Удаление отладки для продакшна
Когда всё заработает, можно удалить console.log вызовы или заменить их на debug-флаг:
constructor(config = {}) {
this.debug = config.debug || false;
// ...
}
log(...args) {
if (this.debug) {
console.log('[MessageContextMenu]', ...args);
}
}
Затем использовать: this.log('Message', data) вместо console.log('[MessageContextMenu] Message', data)