(messageId)
| 750 | } |
| 751 | |
| 752 | function showMessageDetail(messageId) { |
| 753 | const connection = state.connections[state.selectedConnectionId]; |
| 754 | if (!connection) return; |
| 755 | |
| 756 | const message = connection.messages.find(m => m.id === messageId); |
| 757 | if (!message) return; |
| 758 | |
| 759 | state.selectedMessageId = messageId; |
| 760 | updateSelectedMessageRow(messageId); |
| 761 | |
| 762 | elements$6.detailTitle.textContent = `消息 #${messageId} - ${message.eventType}`; |
| 763 | |
| 764 | let formattedData; |
| 765 | try { |
| 766 | const parsed = JSON.parse(message.data); |
| 767 | formattedData = renderCollapsibleJson(parsed); |
| 768 | } catch (e) { |
| 769 | formattedData = escapeHtml(message.data); |
| 770 | } |
| 771 | |
| 772 | elements$6.detailJson.innerHTML = formattedData; |
| 773 | updatePinButtonState(); |
| 774 | updateDetailNavButtons(); |
| 775 | showDetailView(); |
| 776 | } |
| 777 | |
| 778 | function updatePinButtonState() { |
| 779 | const isPinned = isMessagePinned(state.selectedConnectionId, state.selectedMessageId); |
no test coverage detected