diff --git a/my-blog/static/css/style.css b/my-blog/static/css/style.css index e5731b8..45598a7 100644 --- a/my-blog/static/css/style.css +++ b/my-blog/static/css/style.css @@ -79,7 +79,7 @@ a.view-markdown:any-link { } .header-content { - max-width: 1000px; + max-width: 800px; margin: 0 auto; display: grid; grid-template-columns: 1fr auto 1fr; @@ -197,7 +197,6 @@ a.view-markdown:any-link { margin-bottom: 16px; } -/* Main Content */ .main-content { grid-area: main; max-width: 800px; @@ -206,13 +205,6 @@ a.view-markdown:any-link { width: 100%; } -@media (max-width: 1000px) { - .main-content { - padding: 0px; - max-width: 100%; - } -} - /* Timeline */ .timeline-container { max-width: 600px; @@ -327,12 +319,9 @@ a.view-markdown:any-link { /* Article */ .article-container { - display: grid; - grid-template-columns: 1fr 240px; - /* gap: 40px; */ - max-width: 1000px; + max-width: 800px; margin: 0 auto; - padding: 100px 0; + padding: 100px 0; } /* article.article-content { padding: 10px; } */ @@ -396,18 +385,12 @@ a.view-markdown:any-link { border-color: var(--white); } -/* Sidebar styles */ -.article-sidebar { - position: sticky; - top: 100px; - height: fit-content; -} - .toc { background: #f6f8fa; border: 1px solid #d1d9e0; border-radius: 8px; padding: 16px; + margin: 20px 0; } .toc h3 { @@ -814,10 +797,8 @@ article.article-content { /* Responsive */ @media (max-width: 1000px) { .article-container { - grid-template-columns: 1fr; - gap: 24px; max-width: 100%; - padding: 50px 0; + padding: 50px 20px; margin: 0; } } @@ -1141,7 +1122,66 @@ article.article-content { .article-meta { padding: 10px; } + .article-actions { padding: 10px; } + + } + +/* Loading spinner for Ask AI panel */ +.loading-content { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 20px; +} + +.loading-spinner { + width: 20px; + height: 20px; + border: 2px solid #f3f3f3; + border-top: 2px solid var(--theme-color); + border-radius: 50%; + animation: spin 1s linear infinite; + margin-bottom: 10px; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.loading-content p { + margin: 0; + color: #656d76; + font-size: 14px; +} + +/* Handle links in chat messages */ +.message-header .handle a { + color: #656d76; + text-decoration: none; + transition: color 0.2s; +} + +.message-header .handle a:hover { + color: var(--theme-color); + text-decoration: underline; +} + +@media (max-width: 1000px) { + .main-content { + padding: 0px; + max-width: 100%; + } + article.article-content { + max-width: 100%; + } + .timeline-feed { + padding: 0px; + } +} + diff --git a/my-blog/static/js/ask-ai.js b/my-blog/static/js/ask-ai.js index 22ecefa..3bb0796 100644 --- a/my-blog/static/js/ask-ai.js +++ b/my-blog/static/js/ask-ai.js @@ -12,24 +12,95 @@ function toggleAskAI() { panel.style.display = isVisible ? 'none' : 'block'; if (!isVisible) { - checkAuthenticationStatus(); + console.log('Ask AI panel opened'); + + // If AI profile data is already available, show introduction immediately + if (aiProfileData) { + console.log('AI profile data available - showing introduction immediately'); + // Quick check for authentication + const userSections = document.querySelectorAll('.user-section'); + const isAuthenticated = userSections.length > 0; + handleAuthenticationStatus(isAuthenticated); + return; + } + + // For production fallback - if OAuth app fails to load, show profiles + const isProd = window.location.hostname !== 'localhost' && !window.location.hostname.includes('preview'); + if (isProd) { + console.log('Production environment detected - using fallback profile display'); + // Shorter timeout for production + setTimeout(() => { + const userSections = document.querySelectorAll('.user-section'); + console.log('Production check - user sections:', userSections.length); + + if (userSections.length === 0) { + console.log('No user sections found in production - showing profiles directly'); + handleAuthenticationStatus(false); + } else { + console.log('User sections found in production - showing authenticated UI'); + handleAuthenticationStatus(true); + } + }, 300); + } else { + checkAuthenticationStatus(); + } } } function checkAuthenticationStatus() { - const userSections = document.querySelectorAll('.user-section'); - const isAuthenticated = userSections.length > 0; + // Check multiple times for OAuth app to load + let checkCount = 0; + const maxChecks = 10; + + const checkForAuth = () => { + console.log(`Auth check attempt ${checkCount + 1}/${maxChecks}`); + const userSections = document.querySelectorAll('.user-section'); + const authButtons = document.querySelectorAll('[data-auth-status]'); + const oauthContainers = document.querySelectorAll('#oauth-container'); + + console.log('User sections found:', userSections.length); + console.log('Auth buttons found:', authButtons.length); + console.log('OAuth containers found:', oauthContainers.length); + + const isAuthenticated = userSections.length > 0; + + if (isAuthenticated || checkCount >= maxChecks - 1) { + console.log('Final auth status:', isAuthenticated); + handleAuthenticationStatus(isAuthenticated); + } else { + checkCount++; + setTimeout(checkForAuth, 200); + } + }; + + checkForAuth(); +} + +function handleAuthenticationStatus(isAuthenticated) { + console.log('Handling auth status:', isAuthenticated); + + // Always hide loading first + document.getElementById('authCheck').style.display = 'none'; if (isAuthenticated) { // User is authenticated - show Ask AI UI - document.getElementById('authCheck').style.display = 'none'; + console.log('User authenticated - showing AI chat interface'); document.getElementById('chatForm').style.display = 'block'; document.getElementById('chatHistory').style.display = 'block'; - // Show initial greeting if chat history is empty + // Show initial greeting if chat history is empty and AI profile is available const chatHistory = document.getElementById('chatHistory'); if (chatHistory.children.length === 0) { - showInitialGreeting(); + if (aiProfileData) { + showInitialGreeting(); + } else { + // Wait for AI profile data + setTimeout(() => { + if (aiProfileData) { + showInitialGreeting(); + } + }, 500); + } } // Focus on input @@ -37,11 +108,18 @@ function checkAuthenticationStatus() { document.getElementById('aiQuestion').focus(); }, 50); } else { - // User not authenticated - show profiles instead of auth message - document.getElementById('authCheck').style.display = 'none'; + // User not authenticated - show AI introduction directly if profile available + console.log('User not authenticated - showing AI introduction'); document.getElementById('chatForm').style.display = 'none'; document.getElementById('chatHistory').style.display = 'block'; - loadAndShowProfiles(); + + if (aiProfileData) { + // Show AI introduction directly using available profile data + showAIIntroduction(); + } else { + // Fallback to profile loading + loadAndShowProfiles(); + } } } @@ -96,8 +174,7 @@ async function loadAndShowProfiles() {