Fix: formatTime undefined → appendMessage падал → чат пустой
Grok не зря говорил — bubbles не появлялись из-за неопределённой функции formatTime в appendMessage template. ReferenceError ловился в try/catch, но bubbles не рендерились. Добавлен formatTime(s) в app.js + try/catch в appendMessage с отправкой AppendMsgError на /api/v1/debug/log
This commit is contained in:
parent
bfaa3af1af
commit
bc47c1ff64
@ -34,15 +34,15 @@
|
||||
</button>
|
||||
</nav>
|
||||
</div>
|
||||
<script src="/js/tg.js?v=27"></script>
|
||||
<script src="/js/api.js?v=27"></script>
|
||||
<script src="/js/views/map.js?v=27"></script>
|
||||
<script src="/js/views/chats.js?v=27"></script>
|
||||
<script src="/js/views/chat.js?v=27"></script>
|
||||
<script src="/js/views/profile.js?v=27"></script>
|
||||
<script src="/js/views/settings.js?v=27"></script>
|
||||
<script src="/js/views/onboarding.js?v=27"></script>
|
||||
<script src="/js/views/review.js?v=27"></script>
|
||||
<script src="/js/app.js?v=27"></script>
|
||||
<script src="/js/tg.js?v=28"></script>
|
||||
<script src="/js/api.js?v=28"></script>
|
||||
<script src="/js/views/map.js?v=28"></script>
|
||||
<script src="/js/views/chats.js?v=28"></script>
|
||||
<script src="/js/views/chat.js?v=28"></script>
|
||||
<script src="/js/views/profile.js?v=28"></script>
|
||||
<script src="/js/views/settings.js?v=28"></script>
|
||||
<script src="/js/views/onboarding.js?v=28"></script>
|
||||
<script src="/js/views/review.js?v=28"></script>
|
||||
<script src="/js/app.js?v=28"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -556,6 +556,22 @@ function escapeHtml(s) {
|
||||
return String(s).replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]));
|
||||
}
|
||||
|
||||
function formatTime(s) {
|
||||
if (!s) return '';
|
||||
try {
|
||||
const d = new Date(s);
|
||||
if (isNaN(d.getTime())) return '';
|
||||
const now = new Date();
|
||||
const sameDay = d.toDateString() === now.toDateString();
|
||||
const hh = String(d.getHours()).padStart(2, '0');
|
||||
const mm = String(d.getMinutes()).padStart(2, '0');
|
||||
if (sameDay) return `${hh}:${mm}`;
|
||||
const dd = String(d.getDate()).padStart(2, '0');
|
||||
const mo = String(d.getMonth() + 1).padStart(2, '0');
|
||||
return `${dd}.${mo} ${hh}:${mm}`;
|
||||
} catch { return ''; }
|
||||
}
|
||||
|
||||
// Debug-оверлей: показывает ошибки JS прямо на экране (для отладки в обычном браузере)
|
||||
window.addEventListener('error', (e) => {
|
||||
console.error('Global error:', e);
|
||||
|
||||
@ -83,6 +83,7 @@ const ChatView = {
|
||||
|
||||
appendMessage(m) {
|
||||
console.log('[Chat] appendMessage called, m:', JSON.stringify(m).slice(0, 200), 'me check:', API.Store.user && m.sender_id === (API.Store.user.id || API.Store.user.user_id));
|
||||
try {
|
||||
const box = document.getElementById('messages');
|
||||
if (!box) { console.error('[Chat] appendMessage: no box'); return; }
|
||||
const me = API.Store.user && m.sender_id === (API.Store.user.id || API.Store.user.user_id);
|
||||
@ -110,6 +111,12 @@ const ChatView = {
|
||||
box.appendChild(div);
|
||||
console.log('[Chat] appended bubble, children:', box.children.length);
|
||||
box.scrollTop = box.scrollHeight;
|
||||
} catch (e) {
|
||||
console.error('[Chat] appendMessage EXCEPTION:', e, 'm:', JSON.stringify(m).slice(0, 200));
|
||||
try {
|
||||
fetch('/api/v1/debug/log', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ kind: 'AppendMsgError', msg: String(e && e.message), stack: String(e && e.stack || '').slice(0, 400), m: String(JSON.stringify(m).slice(0, 200)) }) });
|
||||
} catch {}
|
||||
}
|
||||
},
|
||||
|
||||
onMessageClick(m) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user