AI-Powered Global Market Sentiment Dashboard

AI-Powered Global Market Sentiment Dashboard

Simulate and analyze global market sentiment based on key economic, corporate, and geopolitical factors.

Adjust Market Influencers

Economic Indicators

Corporate & Geopolitical Factors

Disclaimer: This tool provides a simulated market sentiment analysis for educational and illustrative purposes only. It does not reflect real-time market data or constitute financial or investment advice. Market sentiment is complex and influenced by many factors. Always consult with qualified financial professionals for investment decisions.

Score: ${corporateGeoSentimentScoreSpan.textContent}

  • Earnings: ${displayEarnings.textContent}
  • Geopolitics: ${displayGeopolitics.textContent}
  • Trade Policy: ${displayTradePolicy.textContent}
  • Headlines: ${displayHeadlines.textContent}
`; pdfContentDiv.appendChild(dashboardResultsSection); // --- Section: Strategic Insights --- const insightsSection = document.createElement('div'); insightsSection.className = 'mt-8 p-4 bg-blue-50 rounded-lg shadow-inner text-gray-700'; insightsSection.innerHTML = `

AI-Driven Strategic Insights:

    ${insightsContentList.innerHTML}
`; pdfContentDiv.appendChild(insightsSection); try { const canvas = await html2canvas(pdfContentDiv, { scale: 2, // Increase scale for better resolution in PDF useCORS: true // Required if you have external images/resources (though none here) }); const imgData = canvas.toDataURL('image/png'); const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'portrait', unit: 'px', format: 'a4' }); const imgWidth = pdf.internal.pageSize.getWidth() - 40; // Subtract margins (20px each side) const imgHeight = (canvas.height * imgWidth) / canvas.width; let position = 20; // Initial Y position with top margin pdf.addImage(imgData, 'PNG', 20, position, imgWidth, imgHeight); // Handle multi-page PDF for long content let heightLeft = imgHeight; heightLeft -= (pdf.internal.pageSize.getHeight() - 40); // Subtract current page usable height while (heightLeft >= -5) { // Adjusted condition to catch slightly overflowing content position = heightLeft - imgHeight + 20; // Calculate position for next page pdf.addPage(); pdf.addImage(imgData, 'PNG', 20, position, imgWidth, imgHeight); heightLeft -= (pdf.internal.pageSize.getHeight() - 40); } pdf.save('Global_Market_Sentiment_Report.pdf'); } catch (error) { console.error("Error generating PDF:", error); // Provide user feedback without alert() const messageBox = document.createElement('div'); messageBox.textContent = "Failed to generate PDF. Please try again or check console for details."; messageBox.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #f8d7da; color: #721c24; padding: 15px 25px; border-radius: 8px; border: 1px solid #f5c6cb; z-index: 1000; box-shadow: 0 4px 12px rgba(0,0,0,0.2); font-family: 'Inter', sans-serif; `; document.body.appendChild(messageBox); setTimeout(() => messageBox.remove(), 5000); // Remove after 5 seconds } finally { // Hide loading spinner and re-enable button pdfSpinner.classList.add('hidden'); downloadPdfBtn.disabled = false; // Remove the temporary PDF content div from the DOM if (pdfContentDiv.parentNode) { pdfContentDiv.parentNode.removeChild(pdfContentDiv); } } } });
Scroll to Top