diff --git a/Server/admin/static/index.html b/Server/admin/static/index.html index b646251a..a81aadfa 100644 --- a/Server/admin/static/index.html +++ b/Server/admin/static/index.html @@ -388,21 +388,38 @@ function renderNav(){ } function navigateTo(id){ - if(state.section==='logs'&&id!=='logs'){state.logConnectSeq++;if(state.logEventSource){state.logEventSource.close();state.logEventSource=null}if(state.logReconnectTimer){clearTimeout(state.logReconnectTimer);state.logReconnectTimer=null}} - state.section=id;renderNav();renderContent(); + try{ + if(state.section==='logs'&&id!=='logs'){state.logConnectSeq++;if(state.logEventSource){state.logEventSource.close();state.logEventSource=null}if(state.logReconnectTimer){clearTimeout(state.logReconnectTimer);state.logReconnectTimer=null}} + state.section=id;renderNav();renderContent(); + }catch(err){ + console.error('[Admin] Tab navigation failed for "'+id+'":', err); + var c=document.getElementById('content'); + if(c)c.innerHTML='
Failed to navigate to '+esc(id)+': '+esc(err&&err.message||String(err))+'
'; + } } function doLogout(){state.logConnectSeq++;if(state.logEventSource){state.logEventSource.close();state.logEventSource=null}if(state.logReconnectTimer){clearTimeout(state.logReconnectTimer);state.logReconnectTimer=null}state.token='';localStorage.removeItem('admin_token');showOverlay('loginOverlay')} /* ═══ Content Router ═══ */ function renderContent(){ - const c=document.getElementById('content');c.scrollTop=0; + const c=document.getElementById('content');if(!c)return;c.scrollTop=0; const r={dashboard:renderDashboard,users:renderUsers,channels:renderChannels,audit:renderAudit,logs:renderLogs,settings:renderSettings,backups:renderBackups,updates:renderUpdates}; c.innerHTML=''+esc(e.message)+'
'}); - else c.innerHTML=result; + const fn=r[state.section]; + if(typeof fn!=='function'){console.error('[Admin] No render function for section: '+state.section);c.innerHTML='Unknown section: '+esc(state.section)+'
';return} + try{ + const result=fn(); + if(result instanceof Promise){ + const renderSection=state.section; + result.then(function(html){if(state.section===renderSection)c.innerHTML=html}).catch(function(e){ + console.error('[Admin] Render error in "'+renderSection+'":', e); + if(state.section===renderSection)c.innerHTML=''+esc(e&&e.message||String(e))+'
'; + }); + }else{c.innerHTML=result} + }catch(e){ + console.error('[Admin] Sync render error in "'+state.section+'":', e); + c.innerHTML=''+esc(e&&e.message||String(e))+'
'; + } } /* ═══ Dashboard ═══ */