CINXE.COM

TRADING ECONOMICS | 20 million INDICATORS FROM 196 COUNTRIES

<!doctype html> <html > <head id="ctl00_Head1"><meta charset="utf-8" /><title> TRADING ECONOMICS | 20 million INDICATORS FROM 196 COUNTRIES </title><meta id="metaDesc" name="description" content=" View more than 20 million economic indicators for 196 countries. Get free indicators, Historical Data, Charts, News and Forecasts for 196 countries." /><meta id="metaKeyword" name="keywords" content="Economic Indicators, Economic Data, Interest Rates, Exchange Rate Forecasts, Trading Economics, Currency Trading, Trading Signal, Trading Recommendations, Forex Signals, Trading Strategies, Forex Trading Strategies" /><meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1" /><meta name="theme-color" content="#333333" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.3/css/bootstrap.min.css" integrity="sha512-SbiR/eusphKoMVVXysTKG/7VseWii+Y3FdHrt0EpKgpToZeemhqHeZeLWLhJutz/2ut2Vw1uQEj2MbRF+TVBUA==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.2/font/bootstrap-icons.min.css" integrity="sha512-YFENbnqHbCRmJt5d+9lHimyEMt8LKSNTMLSaHjvsclnZGICeY/0KYEeiHwD1Ux4Tcao0h60tdcMv+0GljvWyHg==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link href="//d3fy651gv2fhd3.cloudfront.net/stylesheet.min.css?v=20250401" rel="stylesheet" /> <script type="text/javascript">var TEChartSettings = {}; var TESymbol = ''; var TECountry = ''; var TECategory = ''; var TEFrequency = ''; var TELanguage = ''; var TELastUpdate = '20250331000000'; var TEChartVersion = ''; var symbol = ''; var symbolType = ''; var hasCalendar = false; var isLoggedIn = false; var TERole = ""; var TEAlertsName = ''; var TEChartsDatasource = 'https://d3ii0wo49og5mi.cloudfront.net'; var IsMobile = false; var TEChartsMeta = ''; var TEForecast = []; var TEAuthorization = ''; var TESecurify = ''; var TESecurifyUrl = ''; var TEType = ''; var TEChartUrl = '/'; var TEComparable = 0; var isAlertsLoaded = false; var IsDarkMode = false; var isPakoLoaded = false; var TEChartsToken = '20240229:nazare'; var TEObfuscationkey = 'tradingeconomics-charts-core-api-key'; var isCopyright = false;</script> <script type="text/javascript">var DEBUG = false; if (window.location.host.indexOf('localhost') > -1) DEBUG = true; else if (window.location.href.indexOf('debug') > -1) DEBUG = true; if (!DEBUG) { if (!window.console) window.console = {}; var methods = ["log", "debug", "info"]; for (var i = 0; i < methods.length; i++) { console[methods[i]] = function () { }; } }</script> <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script> <script> console.log("[GPT] Ad Manager Control"); window.googletag = window.googletag || { cmd: [] }; const adSlots = ["homepage-banner", "nav-banner", "markets-banner", "calendar-banner", "charts-banner"] const adSizes = [[728, 90], [336, 280], [750, 300], [970, 250], [250, 250]]; googletag.cmd.push(function () { console.log("[GPT] Push"); let adMapping = googletag.sizeMapping() .addSize([1600, 900], [[970, 250], [750, 300], [728, 90]]) .addSize([1200, 800], [[970, 250], [750, 300], [728, 90]]) .addSize([1024, 768], [[970, 250], [750, 300], [728, 90]]) .addSize([768, 600], [[728, 90], [750, 300], [336, 280], [300, 250]]) .addSize([480, 320], [[320, 100], [320, 50], [300, 250]]) .addSize([320, 200], [[320, 100], [320, 50]]) .addSize([0, 0], []) .build(); // Loop through and log each element document.querySelectorAll('.ad-slot').forEach(function (adSlot) { const adSlotId = adSlot.id; console.log("[GPT] Ad Slot Id:", adSlotId); // check if ad slot is in the list if (!adSlots.includes(adSlotId)) { console.log("[GPT] Ad Slot not found in list"); return; } if (adSlotId == "charts-banner") { console.log("[GPT] Ad Size Adjusted for Charts"); adMapping = googletag.sizeMapping() .addSize([1024, 768], [[750, 300], [728, 90]]) .addSize([768, 600], [[728, 90], [750, 300], [336, 280], [300, 250]]) .addSize([480, 320], [[320, 100], [320, 50], [300, 250]]) .addSize([320, 200], [[320, 100], [320, 50]]) .addSize([0, 0], []) .build(); } const adSlotInstance = googletag.defineSlot("/23288354674/" + adSlotId, adSizes, adSlotId).addService(googletag.pubads()); adSlotInstance.defineSizeMapping(adMapping); }); googletag.pubads().enableSingleRequest(); googletag.pubads().collapseEmptyDivs(); googletag.enableServices(); }); </script> <link rel="icon" href="//d3fy651gv2fhd3.cloudfront.net/favicon.svg" type="image/svg+xml" /><link rel="canonical" href="https://tradingeconomics.com" /></head> <body > <script>IsDarkMode=false;</script> <form method="post" action="./" id="aspnetForm"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="KzdC8t90fhX75ZWeyh3qiyv/UF1fByjP/RfQqrlUT/aWxNwbEKDc20HJUVHnSunt0cHIwnEA6eoWlXBlhfnbAo6jkyI=" /> </div> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" /> </div> <script type="text/javascript">console.log("[GPT] Ad Manager Homepage Banner");</script> <style> body { margin-top: -50px; } .fixed-top { position:relative; } .navbar{ margin-top: 15px; } .ad-container { text-align: center; } </style> <div class="container"> <div class="row"> <div class="col-xl-12"> <div id="ctl00_ctl05_adManager" class="ad-container"> <div class='ad-slot' id='homepage-banner' style='min-width: 250px; min-height: 90px;'> <script> googletag.cmd.push(function () { googletag.display('homepage-banner'); }); </script> </div> </div> </div> </div> </div> <nav id="ctl00_NavigationUC1_ctl00_menu" class="navbar navbar-dark fixed-top" role="navigation"> <div class="container"> <div class="navbar-header navbar-header-search" id="searchMobileHeader"> <div class="d-flex justify-content-between"> <a class="navbar-brand" style="width: 100%"> <input type="text" placeholder="Search" id="thisIstheTinySearchBoxIdTag" autocomplete="off" class="nav-search-input-class navbar-search-2" /> </a> <ul id="thisIstheTinySearchResultsIdTag" class="dropdown-menu navbar-search-1"> <li> <div class="container-fluid"> <div id="dpSearch-resultCnt-tiny" class="dpTaResult"> </div> </div> </li> </ul> <div class="navbar-mobile-close-search"> <a noref class="navbar-mobile-item" id="thisIsTheTinyRemoveId"><i class="bi bi-x-lg"></i></a> </div> </div> </div> <div class="navbar-header navbar-collapse float-end" id="mainHeader"> <div class="d-flex"> <button type="button" class="navbar-toggler" data-bs-toggle="offcanvas" data-bs-target="#tesidemenu" aria-controls="tesidemenuoptions"> <span class="navbar-toggler-icon"></span> </button> <div class="logo-banner d-flex justify-content-between float-right"> <a class="navbar-brand" href="/"> <svg width="129" height="35" version="1.1" viewBox="0 0 34.131 9.2604" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" aria-label = "Trading Economics logo"> <g fill="#858585" stroke="#858585" stroke-width=".1" ><path d="m1.3315 8.5517v-3.7879h2.8086v0.64079h-2.0438v0.83974h1.9017v0.6382h-1.9017v1.0309h2.1162v0.6382z"/><path d="m7.2846 7.1591 0.74156 0.23513q-0.17053 0.62012-0.56844 0.92242-0.39532 0.29972-1.0051 0.29972-0.75448 0-1.2402-0.51418-0.48576-0.51676-0.48576-1.4108 0-0.94568 0.48834-1.4676 0.48834-0.52452 1.2842-0.52452 0.69505 0 1.1291 0.41083 0.25838 0.24288 0.38757 0.69763l-0.75706 0.18087q-0.067179-0.29456-0.28164-0.46509-0.21187-0.17053-0.51676-0.17053-0.42116 0-0.68471 0.30231-0.26097 0.30231-0.26097 0.97927 0 0.7183 0.25838 1.0232 0.25838 0.30489 0.67179 0.30489 0.30489 0 0.52452-0.19379 0.21962-0.19379 0.31523-0.60978z"/><path d="m8.5275 6.681q0-0.57878 0.17312-0.97152 0.12919-0.28939 0.3514-0.51935 0.22479-0.22996 0.49093-0.34106 0.35398-0.14986 0.81649-0.14986 0.83716 0 1.3384 0.51935 0.50385 0.51935 0.50385 1.4444 0 0.91726-0.49868 1.4366-0.49868 0.51676-1.3333 0.51676-0.84491 0-1.3436-0.51418-0.49868-0.51676-0.49868-1.4211zm0.78807-0.025838q0 0.64337 0.29714 0.97669 0.29714 0.33073 0.75448 0.33073 0.45734 0 0.74931-0.32815 0.29456-0.33073 0.29456-0.9896 0-0.65112-0.2868-0.97152-0.28422-0.32039-0.75706-0.32039-0.47284 0-0.76223 0.32556-0.28939 0.32298-0.28939 0.97669z"/><path d="m12.806 8.5517v-3.7879h0.74414l1.5503 2.5296v-2.5296h0.71055v3.7879h-0.7674l-1.527-2.4701v2.4701z"/><path d="m16.465 6.681q0-0.57878 0.17312-0.97152 0.12919-0.28939 0.3514-0.51935 0.22479-0.22996 0.49093-0.34106 0.35398-0.14986 0.81649-0.14986 0.83716 0 1.3384 0.51935 0.50384 0.51935 0.50384 1.4444 0 0.91726-0.49868 1.4366-0.49868 0.51676-1.3333 0.51676-0.84491 0-1.3436-0.51418-0.49868-0.51676-0.49868-1.4211zm0.78807-0.025838q0 0.64337 0.29714 0.97669 0.29714 0.33073 0.75448 0.33073t0.74931-0.32815q0.29456-0.33073 0.29456-0.9896 0-0.65112-0.2868-0.97152-0.28422-0.32039-0.75706-0.32039t-0.76223 0.32556q-0.28939 0.32298-0.28939 0.97669z"/><path d="m20.726 8.5517v-3.7879h1.1446l0.6873 2.5838 0.67955-2.5838h1.1472v3.7879h-0.71055v-2.9817l-0.75189 2.9817h-0.73639l-0.74931-2.9817v2.9817z"/><path d="m25.121 8.5517v-3.7879h0.76481v3.7879z"/><path d="m29.038 7.1591 0.74156 0.23513q-0.17053 0.62012-0.56844 0.92242-0.39532 0.29972-1.0051 0.29972-0.75448 0-1.2402-0.51418-0.48576-0.51676-0.48576-1.4108 0-0.94568 0.48834-1.4676 0.48834-0.52452 1.2842-0.52452 0.69505 0 1.1291 0.41083 0.25838 0.24288 0.38757 0.69763l-0.75706 0.18087q-0.06718-0.29456-0.28164-0.46509-0.21187-0.17053-0.51676-0.17053-0.42116 0-0.68471 0.30231-0.26097 0.30231-0.26097 0.97927 0 0.7183 0.25838 1.0232 0.25838 0.30489 0.67179 0.30489 0.30489 0 0.52452-0.19379 0.21962-0.19379 0.31523-0.60978z"/><path d="m30.242 7.3193 0.74414-0.072347q0.06718 0.37465 0.2713 0.55035 0.2067 0.1757 0.55552 0.1757 0.36949 0 0.55552-0.15503 0.18862-0.15761 0.18862-0.3669 0-0.13436-0.0801-0.22738-0.077514-0.095602-0.27388-0.16536-0.13436-0.046509-0.61237-0.16536-0.61495-0.15245-0.863-0.37465-0.34882-0.31264-0.34882-0.76223 0-0.28939 0.16278-0.54002 0.16536-0.25321 0.47284-0.38499 0.31006-0.13178 0.74672-0.13178 0.71314 0 1.0723 0.31264 0.36174 0.31264 0.37982 0.83457l-0.76481 0.03359q-0.04909-0.29197-0.21187-0.41858-0.1602-0.12919-0.48317-0.12919-0.33331 0-0.52193 0.13694-0.12144 0.08785-0.12144 0.23513 0 0.13436 0.11369 0.22996 0.14469 0.12144 0.7028 0.25321t0.82424 0.27389q0.26872 0.13953 0.41858 0.38499 0.15244 0.24288 0.15244 0.60203 0 0.32556-0.18087 0.60978-0.18087 0.28422-0.5116 0.42375-0.33073 0.13694-0.82424 0.13694-0.7183 0-1.1033-0.33073-0.38499-0.33331-0.45992-0.96893z"/></g> <g fill="#ddd" stroke="#ddd" stroke-width=".1" ><path d="m1.4629 4.2437v-2.8324h-1.0116v-0.57671h2.7091v0.57671h-1.0092v2.8324z"/><path d="m3.607 4.2437v-3.4091h1.4487q0.54648 0 0.79297 0.093018 0.24882 0.090692 0.39765 0.32556 0.14883 0.23487 0.14883 0.53718 0 0.3837-0.22557 0.63484-0.22557 0.24882-0.67438 0.31393 0.22324 0.13022 0.36742 0.28603 0.1465 0.1558 0.393 0.55345l0.41625 0.66508h-0.82321l-0.49764-0.74182q-0.2651-0.39765-0.36277-0.49997-0.097668-0.10464-0.20696-0.14185-0.1093-0.039532-0.34649-0.039532h-0.13953v1.4232zm0.68833-1.9673h0.50927q0.49532 0 0.61857-0.041858t0.19301-0.14418q0.069763-0.10232 0.069763-0.2558 0-0.17208-0.093018-0.27673-0.090692-0.10697-0.25812-0.13488-0.083716-0.011627-0.50229-0.011627h-0.53718z"/><path d="m10.118 4.2437h-0.74879l-0.29766-0.77437h-1.3627l-0.28138 0.77437h-0.73019l1.3278-3.4091h0.72786zm-1.2674-1.3488-0.46974-1.265-0.46044 1.265z"/><path d="m10.481 0.8346h1.2581q0.42556 0 0.6488 0.065112 0.29998 0.088367 0.51392 0.31393 0.21394 0.22557 0.32556 0.55345 0.11162 0.32556 0.11162 0.8046 0 0.4209-0.10464 0.72554-0.1279 0.37207-0.36509 0.60229-0.17906 0.17441-0.48369 0.27208-0.22789 0.072089-0.60926 0.072089h-1.2953zm0.68833 0.57671v2.258h0.51392q0.28835 0 0.41625-0.032556 0.16743-0.041858 0.27673-0.14185 0.11162-0.099994 0.18138-0.32789 0.06976-0.23022 0.06976-0.62554t-0.06976-0.60694-0.19534-0.33021q-0.12557-0.1186-0.31858-0.16046-0.14418-0.032556-0.56508-0.032556z"/><path d="m13.902 4.2437v-3.4091h0.68833v3.4091z"/><path d="m15.253 4.2437v-3.4091h0.66973l1.3953 2.2766v-2.2766h0.6395v3.4091h-0.69066l-1.3743-2.2231v2.2231z"/><path d="m20.271 2.9903v-0.57438h1.4836v1.3581q-0.21627 0.20929-0.62787 0.36974-0.40928 0.15813-0.83018 0.15813-0.53485 0-0.9325-0.22324-0.39765-0.22557-0.59764-0.64182-0.19999-0.41858-0.19999-0.90925 0-0.53253 0.22324-0.94645 0.22324-0.41393 0.65345-0.63484 0.32789-0.16976 0.81623-0.16976 0.63484 0 0.99064 0.26743 0.35812 0.2651 0.46044 0.73484l-0.68368 0.1279q-0.072088-0.25115-0.27208-0.39532-0.19766-0.1465-0.49532-0.1465-0.45114 0-0.71856 0.28603-0.2651 0.28603-0.2651 0.84879 0 0.60694 0.26975 0.91157 0.26975 0.30231 0.70693 0.30231 0.21627 0 0.43253-0.083716 0.21859-0.086041 0.3744-0.20696v-0.43253z"/></g> </svg> </a> <div class="d-flex align-items-center nav-options"> <div class="d-flex align-items-center nav-entry-link-group"> <a class="nav-entry-link d-none d-md-block" href="/calendar"><span>Calendar</span></a> <a class="nav-entry-link d-none d-md-block" href="/stream"><span>News</span></a> <div class="dropdown"> <a href="#" class="dropdown d-flex nav-entry-link d-none d-md-block" data-bs-toggle="dropdown"><span>Markets</span></a> <ul class="dropdown-menu nav-dropdown-menu"> <li class='dropdown-item nav-dropdown-item'><a href="/commodities">Commodities</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/stocks">Indexes</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/shares">Shares</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/currencies">Currencies</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/crypto">Crypto</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/bonds">Bonds</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/earnings">Earnings</a></li> </ul> </div> <a class="nav-entry-link d-none d-lg-block" href="/indicators"><span>Indicators</span></a> <a class="nav-entry-link d-none d-xl-block" href="/countries"><span >Countries</span></a> <div class="dropdown"> <a href="#" class="dropdown d-flex nav-entry-link d-none d-md-block" data-bs-toggle="dropdown"><span>Forecasts</span></a> <ul class="dropdown-menu nav-dropdown-menu"> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/commodity">Commodities</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/stock-market">Indexes</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/currency">Currencies</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/crypto">Crypto</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecast/government-bond-10y">Bonds</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/forecasts">Countries</a></li> <li class='dropdown-item nav-dropdown-item'><a href="/indicators?g=forecast">Indicators</a></li> </ul> </div> </div> <div class="search-li d-none d-lg-block"> <a noref id="thisIsTheSearchPlaceholderId" class="nav-searchbox-class stickydropdown d-block" title="Search"> <div id="thisIsTheSearchBoxWrapperId" class="typeahead-searchbox-glyphicon-wrapper d-flex "> <input type="text" placeholder="Search" aria-label="Search" id="thisIstheSearchBoxIdTag" autocomplete="off" class="d-none d-md-block nav-search-input-class"> </div> </a> <ul id="thisIstheSearchResultsIdTag" class="dropdown-menu nav-dropdown-menu typeahead-wrapper"> <li> <div class="container"> <div id="dpSearch-resultCnt" class="dpTaResult"> </div> </div> </li> </ul> </div> <div> <a class="d-block d-lg-none navbar-mobile-item" id="thisIsTheTinyGlyphiconId"><i class="bi bi-search me-2"></i></a> </div> <div class="dropdown dropdown-notification-list"> <button class="btn btn-notification-list" type="button" id="dropdownNotificationList" data-bs-toggle="offcanvas" data-bs-target="#offcanvasTop"> <svg xmlns="http://www.w3.org/2000/svg" width="21px" height="21px" viewBox="0 0 24 24" id="notification-empty" style="vertical-align:middle !important" data-name="notification-empty"><rect id="view-box" width="24" height="24" fill="none"/><path id="Shape" d="M6,17v-.5H2.25A2.253,2.253,0,0,1,0,14.25v-.382a2.542,2.542,0,0,1,1.415-2.289A1.248,1.248,0,0,0,2.1,10.572l.446-4.91a6.225,6.225,0,0,1,12.4,0l.446,4.91a1.26,1.26,0,0,0,.686,1.005,2.547,2.547,0,0,1,1.418,2.29v.382a2.252,2.252,0,0,1-2.25,2.25H11.5V17A2.75,2.75,0,0,1,6,17Zm1.5,0A1.25,1.25,0,0,0,10,17v-.5H7.5ZM4.045,5.8,3.6,10.708A2.738,2.738,0,0,1,2.089,12.92a1.055,1.055,0,0,0-.589.949v.382A.751.751,0,0,0,2.25,15h13A.751.751,0,0,0,16,14.25v-.382a1.054,1.054,0,0,0-.586-.948A2.739,2.739,0,0,1,13.9,10.708L13.456,5.8a4.725,4.725,0,0,0-9.411,0Z" transform="translate(3.25 2.25)" fill="#ddd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="21px" height="21px" viewBox="0 0 24 24" id="notification-new" style="vertical-align:middle !important; display:none" data-name="notification-new"><rect id="view-box" width="24" height="24" fill="none" /><path id="Shape" d="M6,17v-.5H2.25A2.253,2.253,0,0,1,0,14.25v-.382a2.542,2.542,0,0,1,1.415-2.289A1.247,1.247,0,0,0,2.1,10.572l.446-4.91A6.227,6.227,0,0,1,10.618.286a5.477,5.477,0,0,0-.635,1.374A4.794,4.794,0,0,0,8.75,1.5,4.7,4.7,0,0,0,4.045,5.8L3.6,10.708A2.739,2.739,0,0,1,2.089,12.92a1.055,1.055,0,0,0-.589.949v.382A.751.751,0,0,0,2.25,15h13A.751.751,0,0,0,16,14.25v-.382a1.053,1.053,0,0,0-.586-.948A2.739,2.739,0,0,1,13.9,10.708l-.2-2.18a5.473,5.473,0,0,0,1.526.221l.166,1.822a1.26,1.26,0,0,0,.686,1.005,2.547,2.547,0,0,1,1.418,2.29v.382a2.252,2.252,0,0,1-2.25,2.25H11.5V17A2.75,2.75,0,0,1,6,17Zm1.5,0A1.25,1.25,0,0,0,10,17v-.5H7.5ZM15.047,6.744A3.486,3.486,0,0,1,13.5,6.28L13.456,5.8a4.7,4.7,0,0,0-1.648-3.185,3.5,3.5,0,0,1,.61-1.417A6.221,6.221,0,0,1,14.95,5.662l.1,1.081v0Z" transform="translate(3.25 2.25)" fill="#ddd" /> <path id="Shape-2" data-name="Shape" d="M3.5,7A3.5,3.5,0,1,1,7,3.5,3.5,3.5,0,0,1,3.5,7Z" transform="translate(15 2)" fill="#4287f5" /> </svg> </button> <div class="offcanvas offcanvas-top notification-list container custom-offcanvas" tabindex="-1" id="offcanvasTop" data-bs-scroll="true" aria-labelledby="offcanvasTopLabel" style="top: 0px !important; border: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);"> <div class="empty-notificationlist"> <div class="empty-notificationlist-content"> <span>You have no new notifications</span> <br> <i class="bi bi-bell-slash-fill"></i> <br> <div><a href="/stream" title="Show all news" class="empty-notificationlist-more"><div class="btn btn-outline-secondary">All News</div></a></div> </div> </div> </div> </div> <div class="userOptionsMenu"> <a title="" data-bs-toggle="offcanvas" href="#offcanvasGuest" role="button" aria-controls="offcanvasGuest"><i class="bi bi-person"></i></a> </div> </div> </div> </div> </div> <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasGuest" aria-labelledby="offcanvasGuestLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasGuestLabel"><b>Members</b></h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body user-offcanvas-body"> <div class="list-group list-group-user"> <a href="/analytics/pricing.aspx?source=menu " class="user-item list-group-item"> <b class="list-group-item-heading"><i class="bi bi-save2-fill me-2"></i>&nbsp;DATA PLANS</b><br> <span class="list-group-item-text">Download historical data for 20 million indicators using your browser.</span> </a> <div class="user-item list-group-item"> <div class="navbar-user-link"> <a href="/analytics/pricing.aspx?source=menu" class="navbar-te-link mx-1">Subscription Plans</a> | <a href="/analytics/features.aspx?source=menu" class="navbar-te-link mx-1">Features</a> </div> </div> </div> <div class="list-group list-group-user"> <a href="/api/" class="user-item list-group-item"> <b class="list-group-item-heading"><i class="bi bi-phone mx-1 me-2"></i>API GATEWAY</b><br> <span class="list-group-item-text mx-1">Direct access to our data from your apps using any programing language.</span> </a> <div class="user-item list-group-item"> <div> <a href="https://docs.tradingeconomics.com/" target="_blank" class="navbar-te-link mx-1">Docs</a> | <a href="/api/?source=menu" class="navbar-te-link mx-1">Features</a> | <a href="https://developer.tradingeconomics.com/" class="navbar-te-link mx-1">Developer</a> </div> </div> </div> <div class="list-group list-group-user"> <a class="user-item list-group-item" href="https://sso.tradingeconomics.com/sso/login?returnurl=https://tradingeconomics.com/"><i class="bi bi-person-fill"></i> Already a user? <b>Login</b></a> </div> <style> .form-switch { width: 3.5em !important; height: 2em !important } .bi-sun-fill { font-size: 12px; color: #ddd !important; } .bi-moon-fill { font-size: 10px; color: #333 !important; } .darkmode-toggle-container { width: auto; padding: 0px; margin-left: 0px; margin-top: 0px; border: none; } .form-check-div-sun { width: 20px; margin-bottom: 3px; margin-left: -54px; position: relative } .form-check-div-moon { width: 20px; margin-bottom: 3px; margin-left: 3px; position: relative } .dk-switch-right-menu{ padding-left:10px; } </style> <div class="list-group list-group-user dk-switch-right-menu"> <div class="d-flex align-items-center darkmode-toggle-container"> <div class="form-check form-switch darkmode-form-switch user-item"> <input class="form-check-input p-1" type="checkbox" role="button" id="flexSwitchCheckChecked"> </div> <div class="form-check-div-sun"> <label class="form-check-label form-check-label-sun p-1 d-inline" for="flexSwitchCheckChecked"><i class="bi bi-sun-fill"></i></label> </div> <div class="form-check-div-moon"> <label class="form-check-label form-check-label-moon p-1 d-inline" for="flexSwitchCheckChecked"><i class="bi bi-moon-fill"></i></label> </div> </div> </div> <script> function SetTheme(isDark) { console.log('Changing theme', isDark); if (IsDarkMode != isDark) { IsDarkMode = isDark; document.body.classList.toggle("dark-theme"); // Set cookie const d = new Date(); d.setTime(d.getTime() + (365 * 24 * 60 * 60 * 1000)); let expires = "expires=" + d.toUTCString(); document.cookie = "IsDarkMode" + "=" + IsDarkMode + ";" + expires + ";path=/"; IsDarkMode ? ga('event', 'te_darkmode_on') : ga('event', 'te_darkmode_off'); window.location.reload(); } } document.addEventListener('DOMContentLoaded', function () { let checkbox = document.getElementById("flexSwitchCheckChecked"); let sundiv = document.getElementsByClassName("form-check-label-sun")[0]; let moondiv = document.getElementsByClassName("form-check-label-moon")[0]; if (IsDarkMode) { sundiv.classList.add("d-none"); moondiv.classList.remove("d-none"); } else { moondiv.classList.add("d-none"); sundiv.classList.remove("d-none"); } checkbox.checked = IsDarkMode; }); document.getElementById("flexSwitchCheckChecked").addEventListener("change", function () { SetTheme(!IsDarkMode) }); </script> </div> </div> <div class="offcanvas offcanvas-start" tabindex="-1" id="tesidemenu" aria-labelledby="tesidemenuoptions"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel"></h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button> </div> <div class="offcanvas-body"> <div class="row navbar-nav-scroll" style="--bs-scroll-height: 95vh;"> <div class="accordion" id="accordionNavbar"> <div class="accordion-item"> <div class="accordion-header menu-main-option"><a class="nav-link accordion-button navmenu-mobile-item" href="/calendar" target="_self"><i class="bi bi-calendar3 me-2"></i>Calendar</a></div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option"><a class="nav-link accordion-button navmenu-mobile-item" href="/stream" target="_self"><i class="bi bi-layout-text-sidebar me-2"></i>News</a></div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseMarkets" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-arrow-down-up me-2"></i>Markets <i class="bi bi-caret-up-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseMarkets" class="accordion-collapse collapse show" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/commodities" target="_self">Commodities</a></li> <li><a class="navmobile-link nav-link" href="/stocks" target="_self">Indexes</a></li> <li><a class="navmobile-link nav-link" href="/shares" target="_self">Shares</a></li> <li><a class="navmobile-link nav-link" href="/currencies" target="_self">Currencies</a></li> <li><a class="navmobile-link nav-link" href="/crypto" target="_self">Crypto</a></li> <li><a class="navmobile-link nav-link" href="/bonds" target="_self">Bonds</a></li> <li><a class="navmobile-link nav-link" href="/earnings" target="_self">Earnings</a></li> <li><a class="navmobile-link nav-link" href="/holidays" target="_self">Holidays</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseCountries" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-globe me-2"></i>Countries<i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseCountries" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/united-states/indicators" target="_self">United States</a></li> <li><a class="navmobile-link nav-link" href="/united-kingdom/indicators" target="_self">United Kingdom</a></li> <li><a class="navmobile-link nav-link" href="/euro-area/indicators" target="_self">Euro Area</a></li> <li><a class="navmobile-link nav-link" href="/australia/indicators" target="_self">Australia</a></li> <li><a class="navmobile-link nav-link" href="/canada/indicators" target="_self">Canada</a></li> <li><a class="navmobile-link nav-link" href="/japan/indicators" target="_self">Japan</a></li> <li><a class="navmobile-link nav-link" href="/china/indicators" target="_self">China</a></li> <li><a class="navmobile-link nav-link" href="/brazil/indicators" target="_self">Brazil</a></li> <li><a class="navmobile-link nav-link" href="/russia/indicators" target="_self">Russia</a></li> <li><a class="navmobile-link nav-link" href="/india/indicators" target="_self">India</a></li> <li><a class='navmobile-link nav-link' href="/countries" target="_self"><i class="bi bi-plus-square me-2"></i>More Countries</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseIndicators" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-bar-chart-fill me-2"></i>Indicators <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseIndicators" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/country-list/interest-rate" target="_self">Interest Rate</a></li> <li><a class="navmobile-link nav-link" href="/country-list/inflation-rate" target="_self">Inflation Rate</a></li> <li><a class="navmobile-link nav-link" href="/country-list/unemployment-rate" target="_self">Unemployment Rate</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gdp-growth-rate" target="_self">GDP Growth</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gdp-per-capita" target="_self">GDP per Capita</a></li> <li><a class="navmobile-link nav-link" href="/country-list/current-account-to-gdp" target="_self">Current Account</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gold-reserves" target="_self">Gold Reserves</a></li> <li><a class="navmobile-link nav-link" href="/country-list/government-debt-to-gdp" target="_self">Government Debt</a></li> <li><a class="navmobile-link nav-link" href="/country-list/crude-oil-production" target="_self">Crude Oil Production</a></li> <li><a class="navmobile-link nav-link" href="/country-list/gasoline-prices" target="_self">Gasoline Prices</a></li> <li><a class="navmobile-link nav-link" href="/country-list/rating" target="_self">Credit Rating</a></li> <li><a class='navmobile-link nav-link' href="/indicators" target="_self"><i class="bi bi-plus-square me-2"></i>More Indicators</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseForecasts" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-graph-down-arrow me-2"></i>Forecasts <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseForecasts" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li class="d-block d-sm-none"><a class="navmobile-link nav-link" href="/indicators?g=forecast" target="_self">Markets & Indicators</a></li> <li class="d-block d-sm-none"><a class="navmobile-link nav-link" href="/forecasts" target="_self">Countries</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecasts">Countries</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/indicators?g=forecast">Indicators</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/commodity">Commodities</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/stock-market">Indexes</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/currency">Currencies</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/crypto">Crypto</a></li> <li class="d-none d-sm-block"><a class='navmobile-link nav-link' href="/forecast/government-bond-10y">Bonds</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSolutions" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-code-square me-2"></i>Solutions <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseSolutions" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/analytics/features.aspx" title="Register">Data Subscriptions</a></li> <li><a class="navmobile-link nav-link" href="/api/" title="Register">API Access</a></li> <li><a class="navmobile-link nav-link" href="/analytics/pricing.aspx?source=nav">Pricing</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseApps" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-phone me-2"></i>Apps <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseApps" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="https://itunes.apple.com/us/app/trading-economics/id1142178921?mt=8" target="_self">App Store</a></li> <li><a class="navmobile-link nav-link" href="https://play.google.com/store/apps/details?id=com.tradingeconomics.calendar" target="_self">Google Play</a></li> <li><a class="navmobile-link nav-link" href="https://www.twitter.com/teconomics" target="_self">Twitter</a></li> </ul> </div> </div> </div> <div class="accordion-item"> <div class="accordion-header menu-main-option d-flex align-items-center"> <button class="accordion-button navmenu-mobile-item collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseMore" aria-expanded="false" aria-controls="collapseTwo"> <i class="bi bi-question-circle me-2"></i>About <i class="bi bi-caret-down-fill ms-auto caret-toggle"></i> </button> </div> <div id="collapseMore" class="accordion-collapse collapse" data-bs-parent="#accordionNavbar"> <div class="accordion-body mobile-accordion-body"> <ul class="nav navbar-nav navbarMobile"> <li><a class="navmobile-link nav-link" href="/api/customers.aspx" target="_self">Customers</a></li> <li><a class="navmobile-link nav-link" href="/investors.aspx" target="_self">Investors</a></li> <li><a class="navmobile-link nav-link" href="/careers.aspx" target="_self">Careers</a></li> <li><a class="navmobile-link nav-link" href="/about-te.aspx" target="_self">About us</a></li> <li><a class="navmobile-link nav-link" href="/contact.aspx" target="_self">Contact</a></li> </ul> </div> </div> </div> <div class="accordion-item d-block d-md-none" style="border: none"> <div class="accordion-header menu-main-option accordion-last-item" style="padding: 30px 0px !important;"></div> </div> </div> </div> </div> </div> </div> </nav> <script> document.addEventListener('DOMContentLoaded', function () { let accordionHeaders = document.querySelectorAll('.menu-main-option'); accordionHeaders.forEach(function (header) { header.addEventListener('click', function () { let caretIcon = header.querySelector('.caret-toggle'); let allCaretIcons = document.querySelectorAll('.menu-main-option .caret-toggle'); allCaretIcons.forEach(function (icon) { if (icon !== caretIcon) { icon.classList.remove('bi-caret-up-fill'); icon.classList.add('bi-caret-down-fill'); } }); caretIcon.classList.toggle('bi-caret-down-fill'); caretIcon.classList.toggle('bi-caret-up-fill'); }); }); }); </script> <div class="container"> <div class="row te-content"> <div class='col-xl-12' role="main"> <style>body{background-color:#f2f2f2;padding-top:70px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{padding-right:10px;padding-left:10px}@media only screen and (max-width:575px){body{padding-top:55px!important}.thumbnail{padding:5px}}</style> <div class="row"> <div class='col-lg-8'> <style> .headline-title{ font-size: 2em; line-height: 1.2em; font-weight: bold; color: #fff; } .headline-content { padding: 15px; padding-top: 30px; padding-bottom: 22px; } .headline-content { max-width: 500px;} </style> <div id="ctl00_ContentPlaceHolder1__ff261beb24d7efbb_panel1"> <style>.headlines{min-height: 310px; background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://d1koue9segiqoj.cloudfront.net/2023/Container%20ship.jpg'); background-size: cover; background-position: center; background-repeat: no-repeat;}</style> <div class="thumbnail headlines"> <div class="row"> <div class="col-lg-12"> <div class="headline-content"> <a href='/stocks' style="text-decoration: none"> <span class="headline-title" href='/stocks'> Market Rout Deepens </span> <br /> <br /> <span class="headlines-description" style="color: #fff">Global stocks and other risk assets continued to slide on Monday, amid growing fears that President Trump’s escalating trade war could spark a global recession. The selloff intensified after China retaliated against the US, while the Trump administration offered no signs of delay or compromise. The STOXX 600 tumbled 6%, the Hang Seng sank 13% and Nikkei closed almost 7% lower. US futures also pointed to 3% decline.</span> </a> <br /> </div> </div> </div> </div> </div> <style> .home-tile-outside { height: 226px } .home-tile-inside { padding-left: 5px; padding-top: 5px; display: flex; flex-direction: column; height: 100%; padding-bottom: 13px; } .home-tile-description { overflow: hidden; text-overflow: ellipsis; flex-grow: 1; } #hometiles { padding-left: 2px; padding-right: 2px } .more-news { width: 100%; text-align: right; text-decoration: underline; margin-top: -15px; margin-bottom: 5px } @media only screen and (max-width:428px) { .home-tile-outside { height: unset } .home-tile-inside { padding: 15px } #hometiles { margin-top: -15px } #hometiles .thumbnail { margin-bottom: 5px } .more-news { margin-top: 10px; text-align: left; margin-bottom: 20px } } .home-tile-timespan { color: #808080; text-align: left; width: 100%; font-size: 0.8em; margin-top: 9px } </style> <div class="row" id="hometiles"> <div class="col-lg-4 col-md-6 col-xs-12"> <div class="thumbnail home-tile-outside"> <a href='/euro-area/retail-sales' style="text-decoration: none;"> <div class="home-tile-inside"> <b>Eurozone Retail Sales Rebound Less than Expected</b> <div class="home-tile-description">Eurozone retail trade rose by 0.3% month-over-month in February 2025, following three consecutive months of stagnation, but fell short of market expectations for a 0.5% increase. Sales of non-food products rebounded by 0.3% after a 0.2% decline in January, while food, drinks, and tobacco sales also rose 0.3%, easing from a 0.5% gain the previous month. Fuel sales edged up 0.2% after remaining flat in January. Among the bloc’s largest economies, retail sales posted gains in Spain (1.3%), Germany (0.7%), and France (0.2%), while declining in Italy (-0.1%) and the Netherlands (-1.4%).</div> <div class="home-tile-timespan"> 4 hours ago </div> </div> </a> </div> </div> <div class="col-lg-4 col-md-6 col-xs-12"> <div class="thumbnail home-tile-outside"> <a href='/commodity/eu-natural-gas' style="text-decoration: none;"> <div class="home-tile-inside"> <b>TTF Prices Extend Losses to Over 6-Month Low</b> <div class="home-tile-description">European natural gas futures fell more than 5% to below €35/MWh, extending a 10% loss in the previous week and nearing their lowest levels since September 2024, driven by fears that the ongoing global trade war could reduce industrial activity and lower gas demand. Tensions escalated as China announced it would impose a 34% tariff on all US imports, mirroring US tariffs, sparking concerns about inflation and slower economic growth. This could lead energy-intensive industries to scale back operations, reducing future energy needs. However, Trump dismissed recession concerns, insisting a market boom is imminent. Additionally, the rise in oil output from May and potential changes to European storage targets may increase gas supply. The market also anticipates more LNG shipments to Europe due to lower demand in China, with weak Asian LNG consumption in 2025 potentially keeping European gas prices lower.</div> <div class="home-tile-timespan"> 5 hours ago </div> </div> </a> </div> </div> <div class="col-lg-4 col-md-6 col-xs-12"> <div class="thumbnail home-tile-outside"> <a href='/germany/exports' style="text-decoration: none;"> <div class="home-tile-inside"> <b>German Exports Growth at 3-Month High</b> <div class="home-tile-description">Exports from Germany rose by 1.8% month-over-month to a ten-month high of EUR 131.6 billion in February 2025, following a revised figure of 0% in the previous month. This marked the strongest growth in export activity since November 2024, primarily driven by higher sales to the EU (0.5%), particularly to the Euro area (0.3%) and the non-Euro area (1%). In addition, shipments increased to third countries (3.2%), particularly to the USA (8.5%) and China (0.6%). However, shipments declined to the UK (-3.8%) and Russian Federation (-3%).</div> <div class="home-tile-timespan"> 6 hours ago </div> </div> </a> </div> </div> <div class="col-lg-4 col-md-6 col-xs-12"> <div class="thumbnail home-tile-outside"> <a href='/united-kingdom/house-price-index-yoy' style="text-decoration: none;"> <div class="home-tile-inside"> <b>UK House Price Growth Holds Steady in March</b> <div class="home-tile-description">The Halifax House Price Index in the UK rose by 2.8% yoy in March 2025, unchanged from a slightly revised figure in February and marking the slowest growth since July 2024. On a monthly basis, house prices fell 0.5%, missing market consensus of a 0.2% rise and accelerating from a revised 0.2% fall in the prior month. It was the sharpest monthly drop in a year. Over the quarter, the index rose by 0.5%. The average property price fell to £296,699 from £298,602 in February. “Our customers completed more house sales in March than in January and February combined, including the busiest single day on record,” said Amanda Bryden, Head of Mortgages at Halifax. She added that potential buyers still face challenges from higher borrowing costs, limited property supply, and economic uncertainty. “However, with further base rate cuts expected and continued wage growth, mortgage affordability should improve. As a result, we still anticipate a modest rise in house prices over the course of the year.”</div> <div class="home-tile-timespan"> 7 hours ago </div> </div> </a> </div> </div> <div class="col-lg-4 col-md-6 col-xs-12"> <div class="thumbnail home-tile-outside"> <a href='/commodity/gold' style="text-decoration: none;"> <div class="home-tile-inside"> <b>Gold Extends Decline </b> <div class="home-tile-description">Gold dropped below $3,030 per ounce on Monday, marking its third consecutive session of losses, as profit-taking and margin calls in other asset classes prompted investors to liquidate some of their gold holdings to cover losses. President Donald Trump's broadening trade war drove a sharp slide in financial markets amid fears that it could push the global economy into a recession. Trump’s blanket 10% tax on imports is now in effect, with even steeper tariffs for many countries expected to be implemented later this week. Meanwhile, Federal Reserve Chairman Jerome Powell warned that tariffs raised the risks of higher inflation and slower economic growth, underscoring a difficult path ahead for policymakers.</div> <div class="home-tile-timespan"> 10 hours ago </div> </div> </a> </div> </div> <div class="col-lg-4 col-md-6 col-xs-12"> <div class="thumbnail home-tile-outside"> <a href='/commodity/brent-crude-oil' style="text-decoration: none;"> <div class="home-tile-inside"> <b>Brent Slides as Tariff Turmoil Spurs Fuel Demand Fears</b> <div class="home-tile-description">Brent crude oil futures dropped around 3% to below $64 per barrel on Monday, hovering at its lowest level since April 2021, amid mounting concerns that the escalating trade war could slow the global economy and weaken energy demand. Last week, Brent posted its steepest weekly drop in 18 months after U.S. President Donald Trump announced sweeping new tariffs, prompting swift retaliation from key trading partners. China, the world’s largest oil importer, is now facing tariffs of more than 50% on its exports to the U.S. In response, Beijing imposed 34% tariffs on U.S. goods. Meanwhile, Trump on Sunday stated that he isn’t deliberately causing the current market sell-off, but remarked, “sometimes you have to take medicine to fix something." Weighing further on prices, Saudi Aramco, the top exporter, lowered crude oil prices for Asian buyers in May to their lowest in four months, after the OPEC+ alliance announced an unexpectedly large output hike.</div> <div class="home-tile-timespan"> 12 hours ago </div> </div> </a> </div> </div> </div> </div> <div class='col-lg-4'> <style> #market-widget .nav {flex-wrap:nowrap;}#market-widget .nav>li>a {padding-left: 3px;padding-right: 3px;outline:none;} .market-widget-thead{font-size: 12px;}.market-widget-th-left{text-align: left;}.market-widget-th-center{text-align: center;}.market-widget-row{padding: 0px;}.market-widget-first{padding-left: 10px!important; max-width: 80px; overflow: hidden;}.market-widget-last{text-align: center;max-width: 70px; overflow: hidden;}.market-widget-change{text-align: left; min-width: 70px}.market-widget-pct{text-align: center;} @media only screen and (max-width: 380px) {#market-widget .nav > li > a {padding-left: 3px;padding-right: 3px;}} .modal{ --bs-modal-header-border-color: none !important; --bs-modal-footer-border-color:none !important; } </style> <style> .market-widget-thead { display:none } </style> <div id="ctl00_ContentPlaceHolder1_ctl02_MarketsTableWidget_Panel1"> <div id="market-widget" class="card"> <ul class="nav nav-tabs " role="tablist" id="mainWidget"> <li role="presentation" class="nav-item"><a aria-current="page" href="#Commodity" class="active nav-link d-table-cell" role="tab" data-bs-toggle="tab">Commodity</a></li> <li role="presentation" class="nav-item"><a aria-current="page" href="#Index" class=" nav-link d-table-cell" role="tab" data-bs-toggle="tab">Index</a></li> <li role="presentation" class="nav-item d-lg-none d-xl-block"><a aria-current="page" href="#Share" class=" nav-link d-table-cell" role="tab" data-bs-toggle="tab">Stocks</a></li> <li role="presentation" class="nav-item"><a aria-current="page" href="#FX" class=" nav-link d-table-cell" role="tab" data-bs-toggle="tab">Forex</a></li> <li role="presentation" class="nav-item"><a aria-current="page" href="#Crypto" class=" nav-link d-table-cell" role="tab" data-bs-toggle="tab">Crypto</a></li> <li role="presentation" class="nav-item"><a aria-current="page" href="#Bond" class=" nav-link d-table-cell" role="tab" data-bs-toggle="tab">Bond</a></li> </ul> <div class="tab-content" style="margin-bottom: -15px"> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl02$MarketsTableWidget$Repeater1$ctl00$group" id="ctl00_ContentPlaceHolder1_ctl02_MarketsTableWidget_Repeater1_ctl00_group" value="Commodity" /> <div role="tabpanel" class="tab-pane fade show active" id='Commodity'> <table class="table table-condensed" style="padding-bottom: -10px;"> <thead class="market-widget-thead"> <tr> <th> </th> <th style="text-align: center;">Actual</th> <th style="text-align: left;" class="d-lg-none d-xl-table-cell">Chg</th> <th style="text-align: center;">%Chg</th> </tr> </thead> <tbody> <tr class='datatable-row' data-symbol="CL1:COM" data-decimals="3"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/crude-oil">Crude Oil</a> </td> <td id="p" class="market-widget-last"> 60.400 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 1.59 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.56% </td> </tr> <tr class='datatable-row-alternating' data-symbol="CO1:COM" data-decimals="3"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/brent-crude-oil">Brent</a> </td> <td id="p" class="market-widget-last"> 63.972 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 1.61 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.45% </td> </tr> <tr class='datatable-row' data-symbol="NG1:COM" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/natural-gas">Natural gas</a> </td> <td id="p" class="market-widget-last"> 3.8380 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.00 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.03% </td> </tr> <tr class='datatable-row-alternating' data-symbol="XB1:COM" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/gasoline">Gasoline</a> </td> <td id="p" class="market-widget-last"> 2.0210 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.04 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.17% </td> </tr> <tr class='datatable-row' data-symbol="HO1:COM" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/heating-oil">Heating Oil</a> </td> <td id="p" class="market-widget-last"> 2.0538 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.04 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -1.77% </td> </tr> <tr class='datatable-row-alternating' data-symbol="XAUUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/gold">Gold</a> </td> <td id="p" class="market-widget-last"> 3023.42 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 13.68 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.45% </td> </tr> <tr class='datatable-row' data-symbol="XAGUSD:CUR" data-decimals="3"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/silver">Silver</a> </td> <td id="p" class="market-widget-last"> 30.170 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.60 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 2.04% </td> </tr> <tr class='datatable-row-alternating' data-symbol="HG1:COM" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/copper">Copper</a> </td> <td id="p" class="market-widget-last"> 4.1442 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.23 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -5.16% </td> </tr> <tr class='datatable-row' data-symbol="S 1:COM" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/soybeans">Soybeans</a> </td> <td id="p" class="market-widget-last"> 978.25 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 1.25 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.13% </td> </tr> <tr class='datatable-row-alternating' data-symbol="W 1:COM" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/wheat">Wheat</a> </td> <td id="p" class="market-widget-last"> 536.64 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 7.64 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 1.44% </td> </tr> <tr class='datatable-row' data-symbol="XAL1:COM" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/coal">Coal</a> </td> <td id="p" class="market-widget-last"> 97.00 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 2.40 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.41% </td> </tr> <tr class='datatable-row-alternating' data-symbol="JBP:COM" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/steel">Steel</a> </td> <td id="p" class="market-widget-last"> 3098.00 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 77.00 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.43% </td> </tr> <tr class='datatable-row' data-symbol="NGEU:COM" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/eu-natural-gas">TTF Gas</a> </td> <td id="p" class="market-widget-last"> 35.53 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.99 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.72% </td> </tr> <tr class='datatable-row-alternating' data-symbol="LB1:COM" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/commodity/lumber">Lumber</a> </td> <td id="p" class="market-widget-last"> 588.53 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 3.59 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.61% </td> </tr> </tbody> <tfoot> <tr> <td colspan="2" class="more-link"><a style="text-decoration: underline" aria-label = "Read more" href="/commodities">More</a></td> <td colspan="4" class="widget-link" style=" "> <div class="plus-sign-widget"> <a style="font-size:12px" aria-label="Add widgets" href="javascript:void(0);"onclick="showWidgetModal();"> <i class="bi bi-plus-square-fill"></i> Add to your site</a> </div> </td> </tr> </tfoot> </table> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl02$MarketsTableWidget$Repeater1$ctl01$group" id="ctl00_ContentPlaceHolder1_ctl02_MarketsTableWidget_Repeater1_ctl01_group" value="Currency" /> <div role="tabpanel" class="tab-pane fade show " id='FX'> <table class="table table-condensed" style="padding-bottom: -10px;"> <thead class="market-widget-thead"> <tr> <th> </th> <th style="text-align: center;">Actual</th> <th style="text-align: left;" class="d-lg-none d-xl-table-cell">Chg</th> <th style="text-align: center;">%Chg</th> </tr> </thead> <tbody> <tr class='datatable-row' data-symbol="EURUSD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/euro-area/currency">EURUSD</a> </td> <td id="p" class="market-widget-last"> 1.09749 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.0023 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.21% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GBPUSD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/united-kingdom/currency">GBPUSD</a> </td> <td id="p" class="market-widget-last"> 1.28400 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.0046 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.35% </td> </tr> <tr class='datatable-row' data-symbol="AUDUSD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/australia/currency">AUDUSD</a> </td> <td id="p" class="market-widget-last"> 0.60563 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.0016 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.27% </td> </tr> <tr class='datatable-row-alternating' data-symbol="NZDUSD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/new-zealand/currency">NZDUSD</a> </td> <td id="p" class="market-widget-last"> 0.56002 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.0003 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.04% </td> </tr> <tr class='datatable-row' data-symbol="USDJPY:CUR" data-decimals="3"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/japan/currency">USDJPY</a> </td> <td id="p" class="market-widget-last"> 146.720 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.2405 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.16% </td> </tr> <tr class='datatable-row-alternating' data-symbol="USDCNY:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/china/currency">USDCNY</a> </td> <td id="p" class="market-widget-last"> 7.32037 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.0238 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.33% </td> </tr> <tr class='datatable-row' data-symbol="USDCHF:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/switzerland/currency">USDCHF</a> </td> <td id="p" class="market-widget-last"> 0.85624 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.0043 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.50% </td> </tr> <tr class='datatable-row-alternating' data-symbol="USDCAD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/canada/currency">USDCAD</a> </td> <td id="p" class="market-widget-last"> 1.42672 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.0053 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.37% </td> </tr> <tr class='datatable-row' data-symbol="USDMXN:CUR" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/mexico/currency">USDMXN</a> </td> <td id="p" class="market-widget-last"> 20.7152 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.2875 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 1.41% </td> </tr> <tr class='datatable-row-alternating' data-symbol="USDINR:CUR" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/india/currency">USDINR</a> </td> <td id="p" class="market-widget-last"> 85.8930 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.3602 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.42% </td> </tr> <tr class='datatable-row' data-symbol="USDBRL:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/brazil/currency">USDBRL</a> </td> <td id="p" class="market-widget-last"> 5.87250 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.0298 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.51% </td> </tr> <tr class='datatable-row-alternating' data-symbol="USDRUB:CUR" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/russia/currency">USDRUB</a> </td> <td id="p" class="market-widget-last"> 86.3473 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 1.6945 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 2.00% </td> </tr> <tr class='datatable-row' data-symbol="USDKRW:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/south-korea/currency">USDKRW</a> </td> <td id="p" class="market-widget-last"> 1464.19 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 4.6800 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.32% </td> </tr> <tr class='datatable-row-alternating' data-symbol="DXY:CUR" data-decimals="3"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/united-states/currency">DXY</a> </td> <td id="p" class="market-widget-last"> 102.876 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.3554 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.35% </td> </tr> </tbody> <tfoot> <tr> <td colspan="2" class="more-link"><a style="text-decoration: underline" aria-label = "Read more" href="/currencies">More</a></td> <td colspan="4" class="widget-link" style=" "> <div class="plus-sign-widget"> <a style="font-size:12px" aria-label="Add widgets" href="javascript:void(0);"onclick="showWidgetModal();"> <i class="bi bi-plus-square-fill"></i> Add to your site</a> </div> </td> </tr> </tfoot> </table> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl02$MarketsTableWidget$Repeater1$ctl02$group" id="ctl00_ContentPlaceHolder1_ctl02_MarketsTableWidget_Repeater1_ctl02_group" value="Index" /> <div role="tabpanel" class="tab-pane fade show " id='Index'> <table class="table table-condensed" style="padding-bottom: -10px;"> <thead class="market-widget-thead"> <tr> <th> </th> <th style="text-align: center;">Actual</th> <th style="text-align: left;" class="d-lg-none d-xl-table-cell">Chg</th> <th style="text-align: center;">%Chg</th> <th class=''></th> </tr> </thead> <tbody> <tr class='datatable-row' data-symbol="SPX:IND" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/united-states/stock-market">US500</a> </td> <td id="p" class="market-widget-last"> 4938.51 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 135 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.66% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row-alternating' data-symbol="INDU:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/indu:ind">US30</a> </td> <td id="p" class="market-widget-last"> 37357 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 958 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.50% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row' data-symbol="US100:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/us100:ind">US100</a> </td> <td id="p" class="market-widget-last"> 16887 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 510 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.93% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row-alternating' data-symbol="NKY:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/japan/stock-market">JP225</a> </td> <td id="p" class="market-widget-last"> 31551 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 2,230 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -6.60% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row' data-symbol="UKX:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/united-kingdom/stock-market">GB100</a> </td> <td id="p" class="market-widget-last"> 7699 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 356 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.42% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: green' title='open trading session'></span></td> </tr> <tr class='datatable-row-alternating' data-symbol="DAX:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/germany/stock-market">DE40</a> </td> <td id="p" class="market-widget-last"> 19776 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 865 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.19% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: green' title='open trading session'></span></td> </tr> <tr class='datatable-row' data-symbol="CAC:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/france/stock-market">FR40</a> </td> <td id="p" class="market-widget-last"> 6950 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 325 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.47% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: green' title='open trading session'></span></td> </tr> <tr class='datatable-row-alternating' data-symbol="FTSEMIB:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/italy/stock-market">IT40</a> </td> <td id="p" class="market-widget-last"> 32631 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 2,018 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -5.82% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: green' title='open trading session'></span></td> </tr> <tr class='datatable-row' data-symbol="IBEX:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/spain/stock-market">ES35</a> </td> <td id="p" class="market-widget-last"> 11782 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 641 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -5.16% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: green' title='open trading session'></span></td> </tr> <tr class='datatable-row-alternating' data-symbol="AS51:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/australia/stock-market">ASX200</a> </td> <td id="p" class="market-widget-last"> 7233 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 435 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -5.67% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row' data-symbol="SHCOMP:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/china/stock-market">SHANGHAI</a> </td> <td id="p" class="market-widget-last"> 3097 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 245 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -7.34% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row-alternating' data-symbol="SENSEX:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/india/stock-market">SENSEX</a> </td> <td id="p" class="market-widget-last"> 73138 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 2,227 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.95% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row' data-symbol="SPTSX:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/canada/stock-market">TSX</a> </td> <td id="p" class="market-widget-last"> 23193 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 1,142 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.69% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: darkred' title='closed trading session'></span></td> </tr> <tr class='datatable-row-alternating' data-symbol="INDEXCF:IND" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/russia/stock-market">MOEX</a> </td> <td id="p" class="market-widget-last"> 2688 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 94 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -3.39% </td> <td id='session' class='d-none d-md-table-cell'><span class='bi bi-clock' style='font-size:10px; color: green' title='open trading session'></span></td> </tr> </tbody> <tfoot> <tr> <td colspan="2" class="more-link"><a style="text-decoration: underline" aria-label = "Read more" href="/stocks">More</a></td> <td colspan="4" class="widget-link" style=" "> <div class="plus-sign-widget"> <a style="font-size:12px" aria-label="Add widgets" href="javascript:void(0);"onclick="showWidgetModal();"> <i class="bi bi-plus-square-fill"></i> Add to your site</a> </div> </td> </tr> </tfoot> </table> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl02$MarketsTableWidget$Repeater1$ctl03$group" id="ctl00_ContentPlaceHolder1_ctl02_MarketsTableWidget_Repeater1_ctl03_group" value="Stocks" /> <div role="tabpanel" class="tab-pane fade show " id='Share'> <table class="table table-condensed" style="padding-bottom: -10px;"> <thead class="market-widget-thead"> <tr> <th> </th> <th style="text-align: center;">Actual</th> <th style="text-align: left;" class="d-lg-none d-xl-table-cell">Chg</th> <th style="text-align: center;">%Chg</th> </tr> </thead> <tbody> <tr class='datatable-row' data-symbol="AAPL:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/aapl:us">Apple</a> </td> <td id="p" class="market-widget-last"> 188.41 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 15.10 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -7.42% </td> </tr> <tr class='datatable-row-alternating' data-symbol="TSLA:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/tsla:us">Tesla</a> </td> <td id="p" class="market-widget-last"> 239.51 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 27.96 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -10.45% </td> </tr> <tr class='datatable-row' data-symbol="MSFT:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/msft:us">Microsoft</a> </td> <td id="p" class="market-widget-last"> 359.77 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 13.91 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -3.72% </td> </tr> <tr class='datatable-row-alternating' data-symbol="AMZN:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/amzn:us">Amazon</a> </td> <td id="p" class="market-widget-last"> 171.43 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 7.16 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.01% </td> </tr> <tr class='datatable-row' data-symbol="FB:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/fb:us">Meta</a> </td> <td id="p" class="market-widget-last"> 505.07 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 26.41 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.97% </td> </tr> <tr class='datatable-row-alternating' data-symbol="NVDA:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/nvda:us">Nvidia</a> </td> <td id="p" class="market-widget-last"> 94.64 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 7.38 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -7.23% </td> </tr> <tr class='datatable-row' data-symbol="V:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/v:us">Visa</a> </td> <td id="p" class="market-widget-last"> 313.48 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 25.72 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -7.58% </td> </tr> <tr class='datatable-row-alternating' data-symbol="JPM:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/jpm:us">JPMorgan</a> </td> <td id="p" class="market-widget-last"> 210.04 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 18.46 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -8.08% </td> </tr> <tr class='datatable-row' data-symbol="INTC:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/intc:us">Intel</a> </td> <td id="p" class="market-widget-last"> 19.92 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 2.57 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -11.43% </td> </tr> <tr class='datatable-row-alternating' data-symbol="JNJ:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/jnj:us">J&J</a> </td> <td id="p" class="market-widget-last"> 153.01 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 7.07 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.42% </td> </tr> <tr class='datatable-row' data-symbol="PG:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/pg:us">P&G</a> </td> <td id="p" class="market-widget-last"> 163.58 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 8.62 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -5.01% </td> </tr> <tr class='datatable-row-alternating' data-symbol="XOM:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/xom:us">Exxon Mobil</a> </td> <td id="p" class="market-widget-last"> 104.17 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 8.22 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -7.31% </td> </tr> <tr class='datatable-row' data-symbol="GOOG:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/goog:us">Alphabet</a> </td> <td id="p" class="market-widget-last"> 147.73 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 4.96 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -3.25% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GS:US" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/gs:us">Goldman Sachs</a> </td> <td id="p" class="market-widget-last"> 469.85 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 40.98 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -8.02% </td> </tr> </tbody> <tfoot> <tr> <td colspan="2" class="more-link"><a style="text-decoration: underline" aria-label = "Read more" href="/stocks">More</a></td> <td colspan="4" class="widget-link" style=" "> <div class="plus-sign-widget"> <a style="font-size:12px" aria-label="Add widgets" href="javascript:void(0);"onclick="showWidgetModal();"> <i class="bi bi-plus-square-fill"></i> Add to your site</a> </div> </td> </tr> </tfoot> </table> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl02$MarketsTableWidget$Repeater1$ctl04$group" id="ctl00_ContentPlaceHolder1_ctl02_MarketsTableWidget_Repeater1_ctl04_group" value="Bond" /> <div role="tabpanel" class="tab-pane fade show " id='Bond'> <table class="table table-condensed" style="padding-bottom: -10px;"> <thead class="market-widget-thead"> <tr> <th> </th> <th style="text-align: center;">Actual</th> <th style="text-align: left;" class="d-lg-none d-xl-table-cell">Chg</th> <th style="text-align: center;">%Chg</th> </tr> </thead> <tbody> <tr class='datatable-row' data-symbol="USGG10YR:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/united-states/government-bond-yield">United States </a> </td> <td id="p" class="market-widget-last"> 4.0280 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.037 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.04% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GUKG10:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/united-kingdom/government-bond-yield">United Kingdom </a> </td> <td id="p" class="market-widget-last"> 4.4970 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.051 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.05% </td> </tr> <tr class='datatable-row' data-symbol="GJGB10:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/japan/government-bond-yield">Japan </a> </td> <td id="p" class="market-widget-last"> 1.1160 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.040 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.04% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GACGB10:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/australia/government-bond-yield">Australia </a> </td> <td id="p" class="market-widget-last"> 4.2190 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.038 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.04% </td> </tr> <tr class='datatable-row' data-symbol="GDBR10:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/germany/government-bond-yield">Germany </a> </td> <td id="p" class="market-widget-last"> 2.5825 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.014 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.01% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GEBR10Y:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/brazil/government-bond-yield">Brazil </a> </td> <td id="p" class="market-widget-last"> 14.7900 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.023 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.24% </td> </tr> <tr class='datatable-row' data-symbol="RUGE10Y:GOV" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/russia/government-bond-yield">Russia </a> </td> <td id="p" class="market-widget-last"> 15.7600 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.200 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.20% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GIND10YR:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/india/government-bond-yield">India </a> </td> <td id="p" class="market-widget-last"> 6.4860 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.019 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.01% </td> </tr> <tr class='datatable-row' data-symbol="GCAN10YR:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/canada/government-bond-yield">Canada </a> </td> <td id="p" class="market-widget-last"> 2.8930 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.009 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.01% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GBTPGR10:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/italy/government-bond-yield">Italy </a> </td> <td id="p" class="market-widget-last"> 3.7980 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.036 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.04% </td> </tr> <tr class='datatable-row' data-symbol="GFRN10:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/france/government-bond-yield">France </a> </td> <td id="p" class="market-widget-last"> 3.3310 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.005 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.01% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GSAB10YR:GOV" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/south-africa/government-bond-yield">South Africa </a> </td> <td id="p" class="market-widget-last"> 11.4440 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.334 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.33% </td> </tr> <tr class='datatable-row' data-symbol="GCNY10YR:GOV" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/china/government-bond-yield">China </a> </td> <td id="p" class="market-widget-last"> 1.6770 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.113 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.15% </td> </tr> <tr class='datatable-row-alternating' data-symbol="GSWISS10:IND" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/switzerland/government-bond-yield">Switzerland </a> </td> <td id="p" class="market-widget-last"> 0.3780 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.058 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -0.06% </td> </tr> </tbody> <tfoot> <tr> <td colspan="2" class="more-link"><a style="text-decoration: underline" aria-label = "Read more" href="/bonds">More</a></td> <td colspan="4" class="widget-link" style=" "> <div class="plus-sign-widget"> <a style="font-size:12px" aria-label="Add widgets" href="javascript:void(0);"onclick="showWidgetModal();"> <i class="bi bi-plus-square-fill"></i> Add to your site</a> </div> </td> </tr> </tfoot> </table> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$ctl02$MarketsTableWidget$Repeater1$ctl05$group" id="ctl00_ContentPlaceHolder1_ctl02_MarketsTableWidget_Repeater1_ctl05_group" value="Crypto" /> <div role="tabpanel" class="tab-pane fade show " id='Crypto'> <table class="table table-condensed" style="padding-bottom: -10px;"> <thead class="market-widget-thead"> <tr> <th> </th> <th style="text-align: center;">Actual</th> <th style="text-align: left;" class="d-lg-none d-xl-table-cell">Chg</th> <th style="text-align: center;">%Chg</th> </tr> </thead> <tbody> <tr class='datatable-row' data-symbol="BTCUSD:CUR" data-decimals="0"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/btcusd:cur">Bitcoin</a> </td> <td id="p" class="market-widget-last"> 76834 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 1,370 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -1.75% </td> </tr> <tr class='datatable-row-alternating' data-symbol="ETHUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/ethusd:cur">Ether</a> </td> <td id="p" class="market-widget-last"> 1505.29 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 69.8548 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.43% </td> </tr> <tr class='datatable-row' data-symbol="BNBUSD:CUR" data-decimals="1"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/bnbusd:cur">Binance</a> </td> <td id="p" class="market-widget-last"> 545.7 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 9.6400 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -1.74% </td> </tr> <tr class='datatable-row-alternating' data-symbol="ADAUSD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/adausd:cur">Cardano</a> </td> <td id="p" class="market-widget-last"> 0.54247 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.0305 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -5.32% </td> </tr> <tr class='datatable-row' data-symbol="SOLUSD:CUR" data-decimals="4"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/solusd:cur">Solana</a> </td> <td id="p" class="market-widget-last"> 101.0661 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 4.5319 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.29% </td> </tr> <tr class='datatable-row-alternating' data-symbol="XRPUSD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/xrpusd:cur">Ripple</a> </td> <td id="p" class="market-widget-last"> 1.76374 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.1567 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -8.16% </td> </tr> <tr class='datatable-row' data-symbol="DOTUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/dotusd:cur">Polkadot</a> </td> <td id="p" class="market-widget-last"> 3.42 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.2604 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -7.08% </td> </tr> <tr class='datatable-row-alternating' data-symbol="AVXUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/avxusd:cur">Avalanche</a> </td> <td id="p" class="market-widget-last"> 15.67 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.3400 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.12% </td> </tr> <tr class='datatable-row' data-symbol="MTCUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/mtcusd:cur">Polygon</a> </td> <td id="p" class="market-widget-last"> 0.17 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.0031 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -1.84% </td> </tr> <tr class='datatable-row-alternating' data-symbol="ATMUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/atmusd:cur">Cosmos</a> </td> <td id="p" class="market-widget-last"> 4.20 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.2441 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -5.50% </td> </tr> <tr class='datatable-row' data-symbol="DAIUSD:CUR" data-decimals="5"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/daiusd:cur">Dai</a> </td> <td id="p" class="market-widget-last"> 1.00006 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-positive-image'></span> 0.0001 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-positive"> 0.01% </td> </tr> <tr class='datatable-row-alternating' data-symbol="LTCUSD:CUR" data-decimals="3"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/ltcusd:cur">Litecoin</a> </td> <td id="p" class="market-widget-last"> 67.609 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 2.8544 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -4.05% </td> </tr> <tr class='datatable-row' data-symbol="UNIUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/uniusd:cur">Uniswap</a> </td> <td id="p" class="market-widget-last"> 4.97 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.1191 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.34% </td> </tr> <tr class='datatable-row-alternating' data-symbol="ALGUSD:CUR" data-decimals="2"> <td class="datatable-item-first" style="text-wrap: auto"> <a href="/algusd:cur">Algorand</a> </td> <td id="p" class="market-widget-last"> 0.16 </td> <td id="nch" class="datatable-item d-lg-none d-xl-table-cell " style="text-align: left; min-width: 70px"> <span class='market-negative-image'></span> 0.0037 </td> <td id="pch" class="market-widget-pct calendar-item calendar-item-negative"> -2.32% </td> </tr> </tbody> <tfoot> <tr> <td colspan="2" class="more-link"><a style="text-decoration: underline" aria-label = "Read more" href="/crypto">More</a></td> <td colspan="4" class="widget-link" style=" "> <div class="plus-sign-widget"> <a style="font-size:12px" aria-label="Add widgets" href="javascript:void(0);"onclick="showWidgetModal();"> <i class="bi bi-plus-square-fill"></i> Add to your site</a> </div> </td> </tr> </tfoot> </table> </div> </div> </div> </div> <script> function redirectToAPI() { window.location.href = "https://tradingeconomics.com/api/widgets.aspx?source=markets-widget"; } function showWidgetModal() { if (isLoggedIn) { return redirectToAPI() } let modalChartTitle = "" let modalChartContent = "<div>"; modalChartContent += "Take your website to the next level by embedding our customizable widgets! Exclusively for subscribers and priced accordingly to your needs."; modalChartContent += "</div>"; let modalChartFooter = "<div style='text-align:center;'><div class='btn-group'>"; if (!isLoggedIn) { let buttonPricing = "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/api/widgets.aspx?source=markets-widget' target='_blank'>Learn more</a>" let buttonContact = "<a class='btn btn-outline-secondary' href='https://tradingeconomics.com/api/contact.aspx?subject=markets+widget' target='_blank'>Questions? <b>Contact us</b></a>" modalChartFooter += buttonPricing + buttonContact; } modalChartFooter += "</div></div>"; var modal = "<div class ='modal' id='chartModal' tabindex='-1' role='dialog' aria-labelledby='myModalLabel'>"; modal += "<div class='modal-dialog modal-dialog-centered' role='document'>"; modal += "<div class='modal-content'>"; modal += "<div class='modal-header'><div class='modal-title'></div><button type='button' class ='btn-close' data-bs-dismiss='modal' aria-label='Close'></button></div>"; modal += "<div class='modal-body' style='text-align:justify;'></div>" modal += "<div class='modal-footer'></div>" modal += "</div></div></div>" var jModal = $(modal); $(jModal).find(".modal-title").html(modalChartTitle); if (modalChartContent) $(jModal).find(".modal-body").html(modalChartContent); else $(jModal).find(".modal-body").remove(); if (modalChartFooter) $(jModal).find(".modal-footer").html(modalChartFooter); else $(jModal).find(".modal-footer").remove(); $(jModal).on('show.bs.modal', function (e) { $(".navbar").css("padding-right", "17px"); $(".pagemenu").css("padding-right", "17px"); $(".pagetabs").css("padding-right", "17px"); }); $(jModal).on('hide.bs.modal', function (e) { $(".navbar").css("padding-right", ""); $(".pagemenu").css("padding-right", ""); $(".pagetabs").css("padding-right", ""); }); $(jModal).modal("show"); } </script> <style> #market-widget-mini {height: 225px;} #market-widget-mini .nav {flex-wrap:nowrap;}#market-widget-mini .nav>li>a {padding-left: 3px;padding-right: 3px;outline:none;} .market-widget-mini-thead{font-size: 12px;}.market-widget-mini-th-left{text-align: left;}.market-widget-mini-th-center{text-align: center;}.market-widget-mini-row{padding: 0px;}.market-widget-mini-first{padding-left: 10px!important; max-width: 80px; overflow: hidden;}.market-widget-mini-last{text-align: center;max-width: 70px; overflow: hidden;}.market-widget-mini-change{text-align: left; min-width: 70px}.market-widget-mini-pct{text-align: center;} #market-widget-mini {padding: 5px 0px 5px 0px}.mini-widget-symbol-tag{position:absolute; font-size:11px;padding:3px 6px; top:50px;color:#808080;left:13px} @media only screen and (max-width: 380px) {#market-widget-mini .nav > li > a {padding-left: 3px;padding-right: 3px;}} @media only screen and (max-width: 991px) { #market-widget-mini { height: 250px; }} @media only screen and (max-width: 767px){ #market-widget-mini .nav>li>a{ padding:3px 3px !important; }} </style> <div id="ctl00_ContentPlaceHolder1__fef939c445a120db_Panel2"> <div id="market-widget-mini" class="card"> <ul class="nav nav-tabs " role="tablist" id="miniWidget"> <li role="presentation" class="nav-item" style="margin-left: 15px;"><a aria-current="page" href="#FX-mini" class=" nav-link d-table-cell" role="tab" data-bs-toggle="tab" title="Currency"> EURUSD</a></li> <li role="presentation" class="nav-item"><a aria-current="page" href="#Index-mini" class="active nav-link d-table-cell" role="tab" data-bs-toggle="tab" title="Index"> US500</a></li> <li role="presentation" class="nav-item"> <a aria-current="page" href="#Bond-mini" class=" nav-link d-table-cell" role="tab" data-bs-toggle="tab" title="Bonds"> US10Y </a> </li> </ul> <div class="tab-content" style="margin-bottom: -15px; padding-left: 15px; padding-right:10px"> <input type="hidden" name="ctl00$ContentPlaceHolder1$_fef939c445a120db$Repeater2$ctl00$minigroup" id="ctl00_ContentPlaceHolder1__fef939c445a120db_Repeater2_ctl00_minigroup" value="Commodity-mini" /> <div role="tabpanel" class="tab-pane fade show " id='Commodity-mini'> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$_fef939c445a120db$Repeater2$ctl01$minigroup" id="ctl00_ContentPlaceHolder1__fef939c445a120db_Repeater2_ctl01_minigroup" value="Currency-mini" /> <div role="tabpanel" class="tab-pane fade show " id='FX-mini'> <span data-symbol="EURUSD:CUR" class="mini-widget-symbol-tag" style="display:none"> EURUSD </span> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$_fef939c445a120db$Repeater2$ctl02$minigroup" id="ctl00_ContentPlaceHolder1__fef939c445a120db_Repeater2_ctl02_minigroup" value="Index-mini" /> <div role="tabpanel" class="tab-pane fade show active" id='Index-mini'> <span data-symbol="SPX:IND" class="mini-widget-symbol-tag" style="display:none"> US500 </span> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$_fef939c445a120db$Repeater2$ctl03$minigroup" id="ctl00_ContentPlaceHolder1__fef939c445a120db_Repeater2_ctl03_minigroup" value="Stocks-mini" /> <div role="tabpanel" class="tab-pane fade show " id='Share-mini'> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$_fef939c445a120db$Repeater2$ctl04$minigroup" id="ctl00_ContentPlaceHolder1__fef939c445a120db_Repeater2_ctl04_minigroup" value="Bond-mini" /> <div role="tabpanel" class="tab-pane fade show " id='Bond-mini'> <span data-symbol="USGG10YR:IND" class="mini-widget-symbol-tag" style="display:none"> US 10Y </span> </div> <input type="hidden" name="ctl00$ContentPlaceHolder1$_fef939c445a120db$Repeater2$ctl05$minigroup" id="ctl00_ContentPlaceHolder1__fef939c445a120db_Repeater2_ctl05_minigroup" value="Crypto-mini" /> <div role="tabpanel" class="tab-pane fade show " id='Crypto-mini'> </div> </div> <style> .mini-widget-table tbody { border-top: 1px solid #dee2e6; } .mini-widget-table > :not(caption) > * > * { border-bottom: none; } #chart-spans-widget { display: flex; justify-content: flex-end; gap: 0px; top: -17px; position: relative; height: 0px; margin-right: 10px; margin-bottom: 3px; } #chart-spans-widget a { display: inline-block; padding: 1px 5px; text-decoration: none; color: #333; font-size: 15px; height: 31px; } #chart-spans-widget a:hover { border-bottom: 2px solid; cursor: pointer; } .chart-spans-widget-active { border-bottom: 2px solid; } .chart-widget-container{ width: 100%; height: 100%;padding-left: 15px; } @media only screen and (max-width: 1399px) and (min-width: 991px) { #chart-spans-widget a:nth-child(3) { display: none; } } @media only screen and (max-width: 1200px) and (min-width: 991px) { #chart-spans-widget a:nth-child(2) { display: none; } } body.dark-theme #chart-spans-widget a { color: #ddd; } body.dark-theme #market-widget-mini .nav-tabs > li > .nav-link.active { background-color: transparent; border-bottom-color: #ddd; } #container .loading-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background-color: rgba(240, 240, 240, 0.9); font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; color: #666; } #container .loading-spinner { width: 30px; height: 30px; border: 4px solid #ccc; border-top: 4px solid #666; border-radius: 50%; animation: spin 0.3s linear infinite; margin-right: 10px; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @media only screen and (max-width: 450px) { #chart-spans-widget a:nth-child(3) { display: none; } } </style> <script src="https://code.highcharts.com/highcharts.js"></script> <div id="chart-spans-widget"> <a class="chart-spans-widget-active" data-value="1y">1Y</a> <a data-value="5y">5Y</a> <a data-value="10y">10Y</a> <a data-value="25y">25Y</a> </div> <div id="container" class="chart-widget-container"></div> <script> const container = document.getElementById('container'); var miniWidgetSpan = '1y'; var chartSymbol = "EURUSD:CUR, SPX:IND, USGG10YR:IND".split(","); var activeChartSymbol = '' const structure_array = ['x', 'y', 'percentChange', 'change', 'open', 'high', 'low', 'close']; const baseDataUrl = 'https://d3ii0wo49og5mi.cloudfront.net/markets/'; const miniWidget = document.getElementById('miniWidget'); function createRequest() { let query = `?span=${miniWidgetSpan}&ohlc=0&key=20240229:nazare` if (miniWidgetSpan.toLowerCase() == 'all') { query = `?span=max&ohlc=0&key=20240229:nazare` miniWidgetSpan = 'max' } return `${baseDataUrl}${activeChartSymbol}${query}` } const chartSpansWidget = document.getElementById('chart-spans-widget'); chartSpansWidget.addEventListener('click', (event) => { if (event.target.tagName === 'A') { event.preventDefault(); miniWidgetSpan = event.target.getAttribute('data-value').trim() let dataUrl = createRequest(); const links = chartSpansWidget.querySelectorAll('a'); links.forEach(link => link.classList.remove('chart-spans-widget-active')); event.target.classList.add('chart-spans-widget-active'); fetchDataAndUpdateChart(dataUrl); } }); if (miniWidget) { miniWidget.addEventListener('click', function (event) { let target = event.target; if (target.tagName !== 'A') { target = target.closest('a'); } if (target && target.tagName === 'A') { const href = target.getAttribute('href').toLowerCase(); if (href.includes("fx") || href.includes("forex")) { updateChartSymbol(0); } if (href.includes("bond")) { updateChartSymbol(2); } if (href.includes("index")) { updateChartSymbol(1); } } }); } async function dataMagic(b64Data, dk) { let compressedData = atob(b64Data); let uint8Array = new Uint8Array(compressedData.length); for (let i = 0; i < compressedData.length; i++) { uint8Array[i] = compressedData.charCodeAt(i); } const keyBytes = new TextEncoder().encode(dk); for (let i = 0; i < uint8Array.length; i++) { uint8Array[i] ^= keyBytes[i % keyBytes.length]; } const decompressedData = pako.inflate(uint8Array, { to: 'string' }); return decompressedData; } async function decompressAndDeobfuscateData(b64Data, dk) { try { const result = await dataMagic(b64Data, dk) return JSON.parse(result) } catch (err) { console.log(err); return null; } } function updateChartSymbol(index) { let symbol = chartSymbol[index].trim().replace(" ", ""); activeChartSymbol = symbol; let dataUrl = createRequest(); fetchDataAndUpdateChart(dataUrl); } function formatDate(timestamp) { const date = new Date(timestamp); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`; } function processChartData(data, dataurl) { if (!Array.isArray(data.series) || data.series.length === 0) { console.error('No valid series data:', data); return; } const chartData = []; data.series.forEach(series => { if (Array.isArray(series.data)) { series.data.forEach(item => { const treatedDatapoint = {}; item.forEach((el, index) => { if (index > 0) { treatedDatapoint[structure_array[index]] = el; } else { treatedDatapoint[structure_array[index]] = el * 1000; treatedDatapoint.date = formatDate(el * 1000); } }); chartData.push(treatedDatapoint); }); } }); updateChartWithData(chartData, dataurl); } function fetchDataAndUpdateChart(dataUrl) { fetch(dataUrl) .then(response => response.json()) .then(data => { return decompressAndDeobfuscateData(data, TEObfuscationkey); }) .then(decompressedData => { if (!decompressedData) { console.error('Decompressed data is invalid'); return; } processChartData(decompressedData, dataUrl); }) .catch(error => console.error('Error in fetch or data processing:', error)); } function roundToStep(value, step) { if (value >= 0) { return Math.round(value / step) * step; } else { return value; } } function formatTick(tick) { if (Math.abs(tick) < 10) { return tick.toFixed(2); } return Math.round(tick); } function formatYTicker(tick) { const absTick = Math.abs(tick); const formatNumber = (value) => { return value % 1 === 0 ? value.toFixed(0) : value.toFixed(2); }; if (absTick < 10) { if (TELanguage == "ar") { return tick % 1 === 0 ? tick.toFixed(0) : tick.toFixed(3); } else { return formatNumber(tick) } } if (absTick >= 1e12) { return formatNumber(tick / 1e12) + 'T'; } if (absTick >= 1e9) { return formatNumber(tick / 1e9) + 'B'; } if (absTick >= 1e6) { return formatNumber(tick / 1e6) + 'M'; } if (absTick >= 1e3) { return formatNumber(tick / 1e3) + 'K'; } return Math.round(tick); } function updateYTicks(maxY, minY, numberTicks, lastdatapoint) { const range = maxY - minY; const desiredTicks = numberTicks; let step = range / desiredTicks; let marginMinY = minY if (minY >= 0) { if ((minY - (step / 2)) < 0) { marginMinY = 0 } else { marginMinY = minY - (step / 2) } } const roundedMin = roundToStep(marginMinY, step); const roundedMax = roundToStep(maxY + (step / 2), step); let tickPositions = []; for (let i = roundedMin; i <= roundedMax; i += step) { tickPositions.push(parseFloat(formatTick(i))); if (tickPositions[tickPositions.length - 1] >= maxY) { break; } } chart.yAxis[0].update({ min: roundedMin, max: maxY, tickPositions: tickPositions, }); return; } function updateXLabelsFormat(dataurl) { chart.xAxis[0].update({ labels: { formatter: function () { if (dataurl.toLowerCase().includes('span=25y') || dataurl.toLowerCase().includes('span=10y') || dataurl.toLowerCase().includes('span=5y')) { return Highcharts.dateFormat('%Y', this.value); } else { const date = new Date(this.value); const year = Highcharts.dateFormat('%Y', this.value); let monthDay = Highcharts.dateFormat('%b/%d', this.value); if (TELanguage == null || TELanguage == '') { Highcharts.setOptions({ lang: { months: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], } }); const utcDate = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds())); monthDay = Highcharts.dateFormat('%b/%d', utcDate); } //const ticks = this.axis.tickPositions; //const index = ticks.indexOf(this.value); //const isFirstTickOfYear = index === 0 || (index > 0 && new Date(ticks[index - 1]).getFullYear() !== date.getFullYear()); /*if (isFirstTickOfYear) { return `${year} ${monthDay}`; }*/ return `${monthDay}`; } } } }); return; } function addCustomLabel(closeValue) { if (!closeValue) { closeValue = chart.series[0].data[chart.series[0].data.length - 1].y } if (closeValue == undefined) return; if (chart.customCloseLabel) { chart.customCloseLabel.destroy(); } if (chart.customCloseLabelRect) { chart.customCloseLabelRect.destroy(); } const yAxis = chart.yAxis[0]; const yAxisXPosition = yAxis.left + yAxis.width; const yAxisYPosition = yAxis.toPixels(closeValue); const labelPadding = 2; const labelFontSize = 13; let labelText = formatYTicker(closeValue); /*if (closeValue < 10) { labelText = labelText.toFixed(4) } else if (closeValue < 1000) { labelText = labelText.toFixed(2) } else if (closeValue >= 1000 && closeValue < 10000) { labelText = labelText.toFixed(1) } else { labelText= labelText.toFixed(0) }*/ const textWidth = chart.renderer .text(labelText, 0, 0) .css({ fontSize: `${labelFontSize}px` }) .getBBox().width; const rectWidth = 53; const rectHeight = labelFontSize + 8; chart.customCloseLabelRect = chart.renderer .rect( yAxisXPosition - 3, yAxisYPosition - rectHeight / 2, rectWidth, rectHeight ) .attr({ fill: '#2962ff', zIndex: 11, rx: 0, ry: 0, }) .add(); chart.customCloseLabel = chart.renderer .text(labelText, yAxisXPosition + labelPadding, yAxisYPosition - 1 + labelFontSize / 2) .attr({ zIndex: 12, align: 'left', }) .css({ fontSize: `${labelFontSize}px`, color: 'white', }) .add(); } function addCloseLine() { const closeSeries = chart.series.find(series => series.name === 'Close Line'); let lastdatapoint = chart.series[0].data[chart.series[0].data.length - 1] let closeValue = lastdatapoint.y if (closeSeries) { closeSeries.update({ data: [[chart.series[0].data[0].x, closeValue], [lastdatapoint.x, closeValue]], animation: false }); } else { chart.addSeries({ name: 'Close Line', type: 'line', data: [[chart.series[0].data[0].x, closeValue], [lastdatapoint.x, closeValue]], color: '#2962ff', dashStyle: 'ShortDash', lineWidth: 1, enableMouseTracking: false, marker: { enabled: false }, animation: false, zIndex: 10 }); } } function updateChartWithData(chartData, dataurl) { let minY = null; let maxY = null; let closeValue = null; chartData.forEach(function (datapoint) { if (minY == null) { minY = datapoint.y; maxY = datapoint.y; } else { minY = Math.min(minY, datapoint.y); maxY = Math.max(maxY, datapoint.y); } closeValue = datapoint.y; }); chart.series[0].setData(chartData, true); chart.userOptions.series[0]['symbol'] = activeChartSymbol; if (TELanguage == 'fa') { minY = minY * 0.997; } updateYTicks(maxY, minY, 3, chartData[chartData.length - 1]); updateXLabelsFormat(dataurl); //addCloseLine(); addCustomLabel(); } function showLoading() { const container = document.getElementById('container'); container.innerHTML = ` <div class="loading-overlay"> <div class="loading-spinner"></div> Loading... </div> `; } let chart; function initializeChart() { if (!isPakoLoaded) { if (!document.querySelector('.loading-overlay')) { showLoading(); } setTimeout(initializeChart, 50); return; } container.innerHTML = ""; chart = Highcharts.chart('container', { chart: { type: 'area', style: { fontFamily: '"Helvetica Neue",Helvetica,Arial,sans-serif', }, backgroundColor: IsDarkMode ? 'transparent' : '', marginLeft: 0, marginTop: 25, marginBottom: 30, marginRight: 50, paddingLeft: 0, animation: false, events: { load() { const initialSymbol = chartSymbol[1].trim().replace(" ", ""); activeChartSymbol = initialSymbol const dataUrl = createRequest(); fetchDataAndUpdateChart(dataUrl); } } }, accessibility: { enabled: false, }, title: { text: null }, subtitle: { text: null }, legend: { enabled: false }, xAxis: { type: 'datetime', labels: { y:17, format: `{value: %Y-%m-%d}`, style: { color: IsDarkMode ? '#ddd' : '', fontSize: '13px' }, }, tickPositioner: function () { const positions = []; const start = this.dataMin; const end = this.dataMax; const offset = (end - start) * 0.1; const adjustedStart = start + offset; const adjustedEnd = end - offset; const screenWidth = window.innerWidth; let numberOfTicks = 2; if (screenWidth >= 991 && screenWidth <= 1200) { numberOfTicks = 1 } const interval = (adjustedEnd - adjustedStart) / numberOfTicks; for (let pos = adjustedStart; pos <= adjustedEnd; pos += interval) { positions.push(pos); } return positions; }, //lineColor: IsDarkMode ? '#ddd' : '#333', //tickColor: IsDarkMode ? '#ddd' : '#333', lineWidth: 0, tickWidth: 0, }, yAxis: { opposite: true, title: { text: null }, labels: { style: { color: IsDarkMode ? '#ddd' : '', fontSize: '13px' }, enabled: true, padding: 0, x: 2, formatter: function () { return formatYTicker(this.value) } }, startOnTick: false, endOnTick: false, gridLineWidth: 0, maxTicks: 4, }, tooltip: { pointFormat: '{point.y} {point.change} ( {point.percentChange}%)', formatter: function () { let percentChange = this.point.percentChange; let change = this.point.change; let percentChangeFormatted = (percentChange > 0 ? '+' : '') + (percentChange != null ? percentChange.toFixed(2) : 0); let changeFormatted = (change > 0 ? '+' : '') + (change != null ? change.toFixed(2) : '0'); let percentChangeColor = percentChange > 0 ? 'green' : 'red'; let changeColor = change > 0 ? 'green' : 'red'; let date = Highcharts.dateFormat('%Y-%m-%d', this.point.x); return date + '<br>' + this.point.y.toFixed(2) + ' ' + `<span style="color:${changeColor}">${changeFormatted }</span> ` + `(<span style="color:${percentChangeColor}">${percentChangeFormatted}%</span>)`; } }, credits: { enabled: false }, plotOptions: { area: { marker: { enabled: false, symbol: 'circle', radius: 2, states: { hover: { enabled: true, } } }, lineWidth: 1, animation: { duration: 0 } } }, series: [{ name: '', data: [], color: IsDarkMode ? '#333' : '#d4dfff', lineWidth: 1, zIndex: 5, fillColor: { linearGradient: [0, 0, 0, 1], stops: !IsDarkMode ? [[0, 'rgba(41, 98, 255, 0.2)'], [1, 'rgba(41, 98, 255, 0.2)']] : [[0, 'rgba(37, 79, 145, 0.6)'], [1, 'rgba(37, 79, 145, 0.6)']] }, zones: [{ value: 0, color: '#ffd4d4', fillColor: 'rgba(255, 0, 0, 0.1)' }, { value: Number.POSITIVE_INFINITY, color: !IsDarkMode ? 'rgba(41, 98, 255, 0.3)' : 'rgba(37, 79, 145, 1)' }] }] }); } Highcharts.setOptions({ lang: { decimalPoint: '.', thousandsSep: ',', numericSymbols: ['k', 'M', 'B', 'T', 'P', 'E'] } }); initializeChart() function onResizeHandler() { addCustomLabel() } window.addEventListener("resize", onResizeHandler); </script> </div> </div> </div> </div> <div class="row"> <div class="col-lg-12"> <style> .te-sort{cursor: pointer;} #homematrix { padding: 0px 0px 0px 0px; border: none; } #homematrix a { color: #fff; text-decoration: none; } #homematrix .btn-group{ margin-top: 20px; } #homematrix a:hover { text-decoration:underline; } #matrix{ background-color: #333; } #matrix th { background-color: #333; color: #fff; font-weight: bold; border: none; } #matrix td { border-color: #000; } #matrix tr:hover { background-color: #254f73; } .matrix-country { font-weight: bold; padding-left: 10px; white-space: nowrap; } </style> <div id='homematrix' class="thumbnail"> <div > <table id="matrix" class="table table-hover sortable-theme-minimal table-heatmap" data-sortable=""> <thead class="te-sort"> <tr> <th><span class='matrix-country'>Country</span></th> <th data-heatmap="1" data-heatmap-limit="20000" data-heatmap-dnColor="#78c1ff">GDP</th> <th data-heatmap="1" data-heatmap-limit="5">GDP Growth</th> <th data-heatmap="1" data-heatmap-limit="10" data-heatmap-dnColor="#78c1ff">Interest Rate</th> <th data-heatmap="1" data-heatmap-limit="20">Inflation Rate</th> <th data-heatmap="1" data-heatmap-limit="20">Jobless Rate</th> <th data-heatmap="1" data-heatmap-limit="20">Gov. Budget</th> <th data-heatmap="1" data-heatmap-limit="200" data-heatmap-dnColor="#78c1ff">Debt/GDP</th> <th data-heatmap="1" data-heatmap-limit="10">Current Account</th> <th data-heatmap="1" data-heatmap-limit="1000" data-heatmap-dnColor="#78c1ff">Population</th> </tr> </thead> <tr> <td><a class="matrix-country" href="/united-states/indicators">United States </a></td> <td data-heatmap-value='27721'><a href="/united-states/gdp">27721</a></td> <td data-heatmap-value='2.40'><a href="/united-states/gdp-growth">2.40</a></td> <td data-heatmap-value='4.50'><a href="/united-states/interest-rate">4.50</a></td> <td data-heatmap-value='-2.80'><a href="/united-states/inflation-cpi">2.80</a></td> <td data-heatmap-value='-4.20'><a href="/united-states/unemployment-rate">4.20</a></td> <td data-heatmap-value='-6.20'><a href="/united-states/government-budget">-6.20</a></td> <td data-heatmap-value='122.30'><a href="/united-states/government-debt-to-gdp">122.30</a></td> <td data-heatmap-value='-3.90'><a href="/united-states/current-account-to-gdp">-3.90</a></td> <td data-heatmap-value='341.15'><a href="/united-states/population">341.15</a></td> </tr> <tr> <td><a class="matrix-country" href="/china/indicators">China </a></td> <td data-heatmap-value='17795'><a href="/china/gdp">17795</a></td> <td data-heatmap-value='1.60'><a href="/china/gdp-growth">1.60</a></td> <td data-heatmap-value='3.10'><a href="/china/interest-rate">3.10</a></td> <td data-heatmap-value='--0.70'><a href="/china/inflation-cpi">-0.70</a></td> <td data-heatmap-value='-5.40'><a href="/china/unemployment-rate">5.40</a></td> <td data-heatmap-value='-5.80'><a href="/china/government-budget">-5.80</a></td> <td data-heatmap-value='83.40'><a href="/china/government-debt-to-gdp">83.40</a></td> <td data-heatmap-value='2.20'><a href="/china/current-account-to-gdp">2.20</a></td> <td data-heatmap-value='1408.00'><a href="/china/population">1408.00</a></td> </tr> <tr> <td><a class="matrix-country" href="/euro-area/indicators">Euro Area </a></td> <td data-heatmap-value='15781'><a href="/euro-area/gdp">15781</a></td> <td data-heatmap-value='0.00'><a href="/euro-area/gdp-growth">0.00</a></td> <td data-heatmap-value='2.65'><a href="/euro-area/interest-rate">2.65</a></td> <td data-heatmap-value='-2.20'><a href="/euro-area/inflation-cpi">2.20</a></td> <td data-heatmap-value='-6.10'><a href="/euro-area/unemployment-rate">6.10</a></td> <td data-heatmap-value='-3.60'><a href="/euro-area/government-budget">-3.60</a></td> <td data-heatmap-value='87.40'><a href="/euro-area/government-debt-to-gdp">87.40</a></td> <td data-heatmap-value='2.80'><a href="/euro-area/current-account-to-gdp">2.80</a></td> <td data-heatmap-value='350.17'><a href="/euro-area/population">350.17</a></td> </tr> <tr> <td><a class="matrix-country" href="/germany/indicators">Germany </a></td> <td data-heatmap-value='4526'><a href="/germany/gdp">4526</a></td> <td data-heatmap-value='-0.20'><a href="/germany/gdp-growth">-0.20</a></td> <td data-heatmap-value='2.65'><a href="/germany/interest-rate">2.65</a></td> <td data-heatmap-value='-2.20'><a href="/germany/inflation-cpi">2.20</a></td> <td data-heatmap-value='-6.30'><a href="/germany/unemployment-rate">6.30</a></td> <td data-heatmap-value='-2.80'><a href="/germany/government-budget">-2.80</a></td> <td data-heatmap-value='62.90'><a href="/germany/government-debt-to-gdp">62.90</a></td> <td data-heatmap-value='5.70'><a href="/germany/current-account-to-gdp">5.70</a></td> <td data-heatmap-value='84.70'><a href="/germany/population">84.70</a></td> </tr> <tr> <td><a class="matrix-country" href="/japan/indicators">Japan </a></td> <td data-heatmap-value='4204'><a href="/japan/gdp">4204</a></td> <td data-heatmap-value='0.60'><a href="/japan/gdp-growth">0.60</a></td> <td data-heatmap-value='0.50'><a href="/japan/interest-rate">0.50</a></td> <td data-heatmap-value='-3.70'><a href="/japan/inflation-cpi">3.70</a></td> <td data-heatmap-value='-2.40'><a href="/japan/unemployment-rate">2.40</a></td> <td data-heatmap-value='-5.50'><a href="/japan/government-budget">-5.50</a></td> <td data-heatmap-value='255.20'><a href="/japan/government-debt-to-gdp">255.20</a></td> <td data-heatmap-value='4.70'><a href="/japan/current-account-to-gdp">4.70</a></td> <td data-heatmap-value='123.59'><a href="/japan/population">123.59</a></td> </tr> <tr> <td><a class="matrix-country" href="/india/indicators">India </a></td> <td data-heatmap-value='3568'><a href="/india/gdp">3568</a></td> <td data-heatmap-value='1.60'><a href="/india/gdp-growth">1.60</a></td> <td data-heatmap-value='6.25'><a href="/india/interest-rate">6.25</a></td> <td data-heatmap-value='-3.61'><a href="/india/inflation-cpi">3.61</a></td> <td data-heatmap-value='-8.20'><a href="/india/unemployment-rate">8.20</a></td> <td data-heatmap-value='-5.87'><a href="/india/government-budget">-5.87</a></td> <td data-heatmap-value='81.59'><a href="/india/government-debt-to-gdp">81.59</a></td> <td data-heatmap-value='-1.20'><a href="/india/current-account-to-gdp">-1.20</a></td> <td data-heatmap-value='1386.18'><a href="/india/population">1386.18</a></td> </tr> <tr> <td><a class="matrix-country" href="/united-kingdom/indicators">United Kingdom </a></td> <td data-heatmap-value='3381'><a href="/united-kingdom/gdp">3381</a></td> <td data-heatmap-value='0.10'><a href="/united-kingdom/gdp-growth">0.10</a></td> <td data-heatmap-value='4.50'><a href="/united-kingdom/interest-rate">4.50</a></td> <td data-heatmap-value='-2.80'><a href="/united-kingdom/inflation-cpi">2.80</a></td> <td data-heatmap-value='-4.40'><a href="/united-kingdom/unemployment-rate">4.40</a></td> <td data-heatmap-value='-4.80'><a href="/united-kingdom/government-budget">-4.80</a></td> <td data-heatmap-value='95.30'><a href="/united-kingdom/government-debt-to-gdp">95.30</a></td> <td data-heatmap-value='-2.70'><a href="/united-kingdom/current-account-to-gdp">-2.70</a></td> <td data-heatmap-value='68.27'><a href="/united-kingdom/population">68.27</a></td> </tr> <tr> <td><a class="matrix-country" href="/france/indicators">France </a></td> <td data-heatmap-value='3052'><a href="/france/gdp">3052</a></td> <td data-heatmap-value='-0.10'><a href="/france/gdp-growth">-0.10</a></td> <td data-heatmap-value='2.65'><a href="/france/interest-rate">2.65</a></td> <td data-heatmap-value='-0.80'><a href="/france/inflation-cpi">0.80</a></td> <td data-heatmap-value='-7.30'><a href="/france/unemployment-rate">7.30</a></td> <td data-heatmap-value='-5.50'><a href="/france/government-budget">-5.50</a></td> <td data-heatmap-value='110.60'><a href="/france/government-debt-to-gdp">110.60</a></td> <td data-heatmap-value='0.40'><a href="/france/current-account-to-gdp">0.40</a></td> <td data-heatmap-value='68.44'><a href="/france/population">68.44</a></td> </tr> <tr> <td><a class="matrix-country" href="/italy/indicators">Italy </a></td> <td data-heatmap-value='2301'><a href="/italy/gdp">2301</a></td> <td data-heatmap-value='0.10'><a href="/italy/gdp-growth">0.10</a></td> <td data-heatmap-value='2.65'><a href="/italy/interest-rate">2.65</a></td> <td data-heatmap-value='-2.00'><a href="/italy/inflation-cpi">2.00</a></td> <td data-heatmap-value='-5.90'><a href="/italy/unemployment-rate">5.90</a></td> <td data-heatmap-value='-3.40'><a href="/italy/government-budget">-3.40</a></td> <td data-heatmap-value='135.30'><a href="/italy/government-debt-to-gdp">135.30</a></td> <td data-heatmap-value='1.10'><a href="/italy/current-account-to-gdp">1.10</a></td> <td data-heatmap-value='58.97'><a href="/italy/population">58.97</a></td> </tr> <tr> <td><a class="matrix-country" href="/brazil/indicators">Brazil </a></td> <td data-heatmap-value='2174'><a href="/brazil/gdp">2174</a></td> <td data-heatmap-value='0.20'><a href="/brazil/gdp-growth">0.20</a></td> <td data-heatmap-value='14.25'><a href="/brazil/interest-rate">14.25</a></td> <td data-heatmap-value='-5.06'><a href="/brazil/inflation-cpi">5.06</a></td> <td data-heatmap-value='-6.80'><a href="/brazil/unemployment-rate">6.80</a></td> <td data-heatmap-value='-8.90'><a href="/brazil/government-budget">-8.90</a></td> <td data-heatmap-value='84.68'><a href="/brazil/government-debt-to-gdp">84.68</a></td> <td data-heatmap-value='-2.55'><a href="/brazil/current-account-to-gdp">-2.55</a></td> <td data-heatmap-value='212.58'><a href="/brazil/population">212.58</a></td> </tr> <tr> <td><a class="matrix-country" href="/canada/indicators">Canada </a></td> <td data-heatmap-value='2142'><a href="/canada/gdp">2142</a></td> <td data-heatmap-value='0.60'><a href="/canada/gdp-growth">0.60</a></td> <td data-heatmap-value='2.75'><a href="/canada/interest-rate">2.75</a></td> <td data-heatmap-value='-2.60'><a href="/canada/inflation-cpi">2.60</a></td> <td data-heatmap-value='-6.70'><a href="/canada/unemployment-rate">6.70</a></td> <td data-heatmap-value='-1.40'><a href="/canada/government-budget">-1.40</a></td> <td data-heatmap-value='107.50'><a href="/canada/government-debt-to-gdp">107.50</a></td> <td data-heatmap-value='-1.00'><a href="/canada/current-account-to-gdp">-1.00</a></td> <td data-heatmap-value='41.53'><a href="/canada/population">41.53</a></td> </tr> <tr> <td><a class="matrix-country" href="/russia/indicators">Russia </a></td> <td data-heatmap-value='2021'><a href="/russia/gdp">2021</a></td> <td data-heatmap-value='-0.80'><a href="/russia/gdp-growth">-0.80</a></td> <td data-heatmap-value='21.00'><a href="/russia/interest-rate">21.00</a></td> <td data-heatmap-value='-10.10'><a href="/russia/inflation-cpi">10.10</a></td> <td data-heatmap-value='-2.40'><a href="/russia/unemployment-rate">2.40</a></td> <td data-heatmap-value='-1.70'><a href="/russia/government-budget">-1.70</a></td> <td data-heatmap-value='14.90'><a href="/russia/government-debt-to-gdp">14.90</a></td> <td data-heatmap-value='2.50'><a href="/russia/current-account-to-gdp">2.50</a></td> <td data-heatmap-value='146.20'><a href="/russia/population">146.20</a></td> </tr> <tr> <td><a class="matrix-country" href="/mexico/indicators">Mexico </a></td> <td data-heatmap-value='1789'><a href="/mexico/gdp">1789</a></td> <td data-heatmap-value='-0.60'><a href="/mexico/gdp-growth">-0.60</a></td> <td data-heatmap-value='9.00'><a href="/mexico/interest-rate">9.00</a></td> <td data-heatmap-value='-3.77'><a href="/mexico/inflation-cpi">3.77</a></td> <td data-heatmap-value='-2.50'><a href="/mexico/unemployment-rate">2.50</a></td> <td data-heatmap-value='-5.00'><a href="/mexico/government-budget">-5.00</a></td> <td data-heatmap-value='49.70'><a href="/mexico/government-debt-to-gdp">49.70</a></td> <td data-heatmap-value='-1.50'><a href="/mexico/current-account-to-gdp">-1.50</a></td> <td data-heatmap-value='128.46'><a href="/mexico/population">128.46</a></td> </tr> </table> </div> <a href="/matrix" aria-label = "Go to matrix for more countries matrix" class="btn-group btn-group-sm" style="padding-left: 5px; padding-bottom: 5px;"> <div class='btn btn-outline-secondary'><i class="bi bi-plus-lg"></i></div> </a> </div> </div> </div> </div> </div> <br /> <br /> </div> <div class="container-fluid te-footer"> <footer> <div class="container"> <div class="row"> <div id="ctl00_Footer1_PanelFooter"> <style>.footer-spacer{padding: 4px}.footer-spacer-head{padding: 30px 4px 4px 4px;}@media only screen and (max-width:768px){.footer-icons{display: flex;margin-left: 50%;}.footer-icons a{padding: 0 12px 8px 0px; }}.footer-twitter{width: 50px; height: 50px;}.footer-github{width: 40px; height: 40px;}.footer-appstore{display: inline-block; overflow: hidden; background: url(//d3fy651gv2fhd3.cloudfront.net/images/appstore-lrg.svg?v=20171228) no-repeat; width: 135px; height: 40px; background-size: contain;}</style> <br /> <br /> <div class="container"> <div class="row"> <div class="col-lg-2 col-md-2 col-6"> <div class="footerHeader">Indicators</div> <a id="ctl00_Footer1_HyperLink6" class="footerItems" href="./">Homepage</a><br /> <a id="ctl00_Footer1_HyperLink17" class="footerItems" href="countries">Countries</a><br /> <a id="ctl00_Footer1_HyperLink18" class="footerItems" href="indicators">Indicators</a><br /> <a id="ctl00_Footer1_HyperLink1" class="footerItems" href="calendar">Calendar</a><br /> <a id="ctl00_Footer1_HyperLink2" class="footerItems" href="forecasts">Forecasts</a><br /> <a id="ctl00_Footer1_HyperLink11" class="footerItems" href="country-list/rating">Ratings</a> </div> <div class="col-lg-2 col-md-2 col-6"> <div class="footerHeader">Solutions</div> <a href="/analytics/features.aspx?source=footer"><span class="footerItems">Data Subscriptions</span></a><br /> <a href="/api/?source=footer"><span class="footerItems">API Access</span></a><br /> <a href="/analytics/excel.aspx"><span class="footerItems">Excel Add-In</span></a><br /> <a href="https://developer.tradingeconomics.com/" target="_blank"><span class="footerItems">Developer Account</span></a><br /> <a href="https://docs.tradingeconomics.com/" target="_blank"><span class="footerItems">Documentation</span></a><br /> <a href="/analytics/pricing.aspx?source=footer" target="_blank"><span class="footerItems">Pricing</span></a><br /> <br /> </div> <div class="col-lg-2 col-md-2 col-6"> <div class="footerHeader">About Us</div> <a id="ctl00_Footer1_HyperLink8" class="footerItems" href="api/customers.aspx">Customers</a><br /> <a id="ctl00_Footer1_HyperLink23" class="footerItems" href="careers.aspx">Careers</a><br /> <a id="ctl00_Footer1_HyperLink21" class="footerItems" href="investors.aspx">Investors</a><br /> <a id="ctl00_Footer1_HyperLink20" class="footerItems" href="advertise.aspx">Advertisers</a><br /> <a id="ctl00_Footer1_HyperLink19" class="footerItems" href="about-te.aspx">About us</a><br /> <a id="ctl00_Footer1_HyperLink9" class="footerItems" href="privacy-policy.aspx">Privacy</a> </div> <div class="col-lg-2 col-md-2 col-6"> <div class="footer-spacer-head"></div> <a href="https://itunes.apple.com/us/app/trading-economics/id1142178921?mt=8" class="footer-appstore"></a> <div class="footer-spacer"></div> <a href="https://play.google.com/store/apps/details?id=com.tradingeconomics.calendar"> <img alt="Android app on Google Play" src="https://d3fy651gv2fhd3.cloudfront.net/images/google-play.png" /></a> </div> </div> </div> <br /> <div class="container"> <div class="row"> <div class="col-lg-1 col-md-2 col-6"> <a class="footer-languages" href="https://tradingeconomics.com" target="_self">English</a><br /> <a class="footer-languages" href="https://es.tradingeconomics.com" target="_self">Español</a><br /> <a class="footer-languages" href="https://pt.tradingeconomics.com" target="_self">Português</a><br /> <a class="footer-languages" href="https://fr.tradingeconomics.com" target="_self">Français</a><br /> <a class="footer-languages" href="https://de.tradingeconomics.com" target="_self">Deutsch</a><br /> </div> <div class="col-lg-1 col-md-2 col-6"> <a class="footer-languages" href="https://it.tradingeconomics.com" target="_self">Italiano</a><br /> <a class="footer-languages" href="https://pl.tradingeconomics.com" target="_self">Polski</a><br /> <a class="footer-languages" href="https://da.tradingeconomics.com" target="_self">Dansk</a><br /> <a class="footer-languages" href="https://sv.tradingeconomics.com" target="_self">Svenska </a><br /> <a class="footer-languages" href="https://no.tradingeconomics.com" target="_self">Norsk</a><br /> </div> <div class="col-lg-1 col-md-2 col-6"> <a class="footer-languages" href="https://ru.tradingeconomics.com" target="_self">Русский</a><br /> <a class="footer-languages" href="https://tr.tradingeconomics.com" target="_self">Türkçe</a><br /> <a class="footer-languages" href="https://hu.tradingeconomics.com" target="_self">Magyar</a><br /> <a class="footer-languages" href="https://fa.tradingeconomics.com" target="_self">Farsi</a><br /> <a class="footer-languages" href="https://id.tradingeconomics.com" target="_self">Indonesian</a><br /> </div> <div class="col-lg-1 col-md-2 col-6"> <a class="footer-languages" href="https://zh.tradingeconomics.com" target="_self">简体中文</a><br /> <a class="footer-languages" href="https://jp.tradingeconomics.com" target="_self">日本語</a><br /> <a class="footer-languages" href="https://ko.tradingeconomics.com" target="_self">한국어</a><br /> <a class="footer-languages" href="https://ar.tradingeconomics.com" target="_self">العربية</a><br /> </div> </div> </div> <br /> <div class="footer-copyright"> <br /> <span>Copyright ©2025 TRADING ECONOMICS<br /> All Rights Reserved</span><br /> </div> <br /> <br /> </div> </div> </div> </footer> </div> </form> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.1/js/bootstrap.bundle.min.js"></script>  <script> console.log('/controls/io.ascx') TEdecryptk = 'j9ONifjoKzxt7kmfYTdKK/5vve0b9Y1UCj/n50jr8d8=' TEdecryptn = 'Ipp9HNSfVBUntqFK7PrtofYaOPV312xy' var socket_url = 'https://live.tradingeconomics.com?key=rain'; console.log("IO Connecting to " + socket_url) var TE_URL = window.location.pathname; socket_url += "&url=" + TE_URL; $.ajaxSetup({ cache: !0 }); $.getScript('//d3fy651gv2fhd3.cloudfront.net/js/io.js?v=20240223', function () { OnSocketIOLoad(); }); var socket = null; var MKTChannels = [] var Subscribed = [] function base64ToUint8Array(base64) { const binaryString = atob(base64); const length = binaryString.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes; } function decryptMessage(ciphertext) { const key = base64ToUint8Array(TEdecryptk); const nonce = base64ToUint8Array(TEdecryptn); const ciphertextUint8Array = new Uint8Array(ciphertext); let decryptedPlaintext = sodium.crypto_secretbox_open_easy(ciphertextUint8Array, nonce, key); decryptedPlaintext = pako.inflate(decryptedPlaintext, { to: 'string' }); if (decryptedPlaintext !== undefined) { return (JSON.parse(decryptedPlaintext)) } } function OnSocketIOLoad() { var MKT_TBL_SELEC = "#table-logic-handler-for-sockets"; var TEChannels = ['calendar']; if (TE_URL == '/') TEChannels = ['calendar', 'market']; else if (TE_URL == "/calendar") TEChannels = ['calendar']; else if (TE_URL.indexOf("shares") > -1) TEChannels = ['market']; else if (TE_URL.indexOf("calendar") > -1) TEChannels = ['calendar', 'market']; else if (TE_URL.indexOf("/dividends") > -1 || TE_URL.indexOf("/ipo") > -1 || TE_URL.indexOf("/stock-splits") > -1 || TE_URL.indexOf("/earnings") > -1) TEChannels = ['calendar', 'market']; else if (TE_URL.indexOf("stream") > -1) TEChannels = ['calendar', 'market', 'stream']; else if (TE_URL.indexOf("/currencies") > -1) TEChannels = ['currencies', 'calendar']; else if (TE_URL.indexOf("/stocks") > -1) TEChannels = ['indexes', 'calendar']; else if (TE_URL.indexOf("/bonds") > -1) TEChannels = ['bonds', 'calendar']; else if (TE_URL.indexOf("/commodities") > -1) TEChannels = ['commodities', 'calendar']; else if (TE_URL.indexOf("/crypto") > -1) TEChannels = ['crypto', 'calendar']; else if (TE_URL.indexOf("/forecast/government-bond-10y") > -1) TEChannels = ['bonds', 'calendar']; else if (TE_URL.indexOf("/forecast/commodity") > -1) TEChannels = ['commodities', 'calendar']; else if (TE_URL.indexOf("/currency") > -1 || TE_URL.indexOf("/stock-market") > -1 || TE_URL.indexOf("/commodity/") > -1 || TE_URL.indexOf("/government-bond-yield") > -1) TEChannels = ['market', 'calendar']; else if (TE_URL.split(':').length == 2) TEChannels = ['calendar', 'market']; console.log('IO EPOCH: 1744029998'); console.log('IO IP: 8.222.208.146'); console.log('IO URL: /');console.log('IO TOKEN: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlcG9jaCI6MTc0NDAyOTk5OCwiaXAiOiI4LjIyMi4yMDguMTQ2IiwidXJsIjoiLyJ9.b7RrxVaWTEssGp2mrBH1V8DsvKpDC9W-jlBJCy1tcHw'); socket = io.connect(socket_url, { withCredentials: true, // Needed for ELB Cookies Stickyness auth: { token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJlcG9jaCI6MTc0NDAyOTk5OCwiaXAiOiI4LjIyMi4yMDguMTQ2IiwidXJsIjoiLyJ9.b7RrxVaWTEssGp2mrBH1V8DsvKpDC9W-jlBJCy1tcHw', url: TE_URL } }); socket.on('connect', function () { ioErrorCount = 0; IS_CONNECTED = !0; // Subscribe to the page symbol if (TE_URL.split(':').length == 2 && TESymbol != '') { var socketSymbol = TESymbol.toUpperCase() console.log('IO Subscribe', socketSymbol, 'No lag'); socket.emit('subscribe', { s: [socketSymbol] }) Subscribed.push(socketSymbol) } // Subscribe to channels if (TEChannels && TEChannels.length) { console.log('IO Subscribing to TEChannels', TEChannels); socket.emit('subscribe', { s: TEChannels }) } else { console.log('IO No TEChannels to Subscribe'); } // Subscribe to symbols if (TE_URL != '/' && TE_URL.indexOf("calendar") <= -1 && (TE_URL.split('/').length > 2 || TE_URL.indexOf(":ind") > -1)) { gatherMKTChannels(); if (MKTChannels && MKTChannels.length) { console.log('IO Subscribing to', MKTChannels.length, 'symbols:', MKTChannels); if (MKTChannels.length <= 36) { socket.emit('subscribe', { s: MKTChannels }) } else { console.log('IO Subscribing using Chunks'); var i, j, temparray, chunk = 36; for (i = 0, j = MKTChannels.length; i < j; i += chunk) { temparray = MKTChannels.slice(i, i + chunk); console.log('IO Subscribing to', temparray.length, 'channels:', temparray); socket.emit('subscribe', { s: temparray }) } } } else { console.log('IO No MKTChannels to Subscribe'); } } socket.on('disconnect', function () { IS_CONNECTED = !1; console.log('Got disconnect!') }); socket.on("smooth-disconnect", function () { socket.disconnect() }) }); var isSnap = !0; for (var i = 0; i < TEChannels.length; i++) { channel = TEChannels[i]; if (channel == 'calendar' || channel == 'stream') continue; console.log('IO Snap ' + channel); socket.on(channel, function (a) { a = decryptMessage(a) if (a.length > 0) { for (i = 0; i < a.length; i++) { TE_UpdateTable(a[i], isSnap) TE_UpdateMiniWidget(a[i]) } isSnap = !1 } else { console.log('IO Sent Empty Market Update') } }) } var ioErrorCount = 0; socket.on("connect_error", (err) => { ioErrorCount++; console.log('IO Connect Error', ioErrorCount); console.log(err.message); if (TE_URL.indexOf("calendar") <= -1 && ioErrorCount % 10 == 0) { console.log('Disconnecting IO'); socket.disconnect(); if (ioErrorCount < 100) { var sleepSecs = ioErrorCount * 5; console.log('Connecting again in', sleepSecs, 'seconds'); setInterval(function () { socket.connect() }, sleepSecs * 1000) } else console.log('Stay disconnected'); } }); socket.on('tick', function (t) { t = decryptMessage(t) TE_UpdateTable(t); if (TE_URL.split(':').length == 2) UpdateMarketTick(t); }); function gatherMKTChannels() { // Temporary block to avoid too many symbols return var nMarkets = $("[data-subscribe]").length; console.log("IO data-subscribe tag present in ", nMarkets, "markets") if (nMarkets == null || typeof input !== "undefined") return else if (nMarkets > 600) console.log("IO Skipping [data-subscribe] because of too many symbols") else { console.log("IO Searching [data-subscribe]") var sCount = 0; $("[data-subscribe]").each(function (i, item) { var socketSymbol = $(item).attr('data-subscribe') if (!MKTChannels.includes(socketSymbol) && !Subscribed.includes(socketSymbol)) { sCount++; console.log('IO [data-subscribe]', sCount, socketSymbol) MKTChannels.push(socketSymbol) } else console.log('Already Subscribed. Skip', socketSymbol) }) } } function TE_UpdateTable(d, isSnap) { var s = d.s; let element_price; $('tr[data-symbol="' + s + '"]').each((i, el) => { element_price = $(el).find("td#p"); }) if (element_price == undefined) { return } const p0 = parseFloat(element_price.text()) var r = $('tr[data-symbol="' + s + '"]'); var p = r.find('td#p'); var dec = 4; if (typeof r.data('decimals') !== 'undefined' && r.data('decimals') !== "") dec = r.data("decimals"); if (p0 != d.p.toFixed(dec)) { p.text(d.p.toFixed(dec)); fg = d.nch > 0 ? 'darkgreen' : d.nch < 0 ? 'darkred' : 'black'; if (IsDarkMode) fg = '#fff' triangle = d.nch > 0 ? '<span class="market-positive-image"></span>' : d.nch < 0 ? '<span class="market-negative-image"></span>' : '<span class="market-neutral-image"></span>'; var previous_triangle = r.find('td#triangle'); if (previous_triangle && previous_triangle.length) { previous_triangle.html(triangle) } var nch = r.find('td#nch'); if (nch) { nch.each(function (i, item) { if ($(item).attr("data-no-triangle")) { $(item).text(d.nch.toFixed(dec)); $(item).css("color", fg); $(item).html(Math.abs(d.nch.toFixed(dec))) } else { $(item).text(d.nch.toFixed(dec)); $(item).css("color", fg); $(item).html(triangle + ' ' + Math.abs(d.nch.toFixed(dec))) } }) } var pch = r.find('td#pch'); pch.text(d.pch.toFixed(2) + '%'); if (TEChannels != "market") { nch.attr('data-value', d.nch); pch.attr('data-value', d.pch) } r.find('td#pch') pch.css("color", fg); bg = IsDarkMode == true ? '#254f73' : '#cdebf9'; p.css("backgroundColor", bg); setTimeout(function () { p.css("backgroundColor", 'transparent') }, 1000) if (!isSnap) { var dt = new Date(); var h = dt.getHours(); if (h < 10) { h = "0" + h } var m = dt.getMinutes(); if (m < 10) { m = "0" + m } var ds = [h, m].join(':'); r.find('td#date').html(ds) } if (d.type && d.type == 'index') { var stateColor = '', stateSpan = ''; var state = d.state; if (d.dstate) state = d.dstate; if (state == 'open') stateColor = 'green'; else if (state == 'closed') stateColor = 'red'; else if (state == 'pre') stateColor = '#CFB53B'; else if (state == 'after') stateColor = '#CFB53B'; else { console.log('IO - Unknown Session State', s); return; } if (stateColor != '') { stateSpan = '<span class="bi bi-clock" style="font-size:10px; color: ' + stateColor + '" title="' + state + ' trading session"></span>'; r.find('td#session').html(stateSpan) } } } }; function TE_UpdateMiniWidget(t) { try { function isSameDay(date1, date2) { return ( date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate() ); } if (chart && TE_URL == '/') { if (chart.userOptions.series[0]['symbol'].toLowerCase() == t.s.toLowerCase()) { let seriesData = chart.series[0].data; let lastDataPoint = seriesData[seriesData.length - 1]; let lastDate = new Date(lastDataPoint.x); let currentDate = new Date(); currentDate.setHours(0, 0, 0, 0); let sameDay = isSameDay(lastDate, currentDate) if (sameDay) { const newValue = t.p; const newChang = t.nch; const newP = t.pch; lastDataPoint.update({ y: newValue, change: newChang, percentChange: newP, }); //addCloseLine(); addCustomLabel(newValue); } else { chart.series[0].addPoint( { x: currentDate.getTime(), y: t.p, change: t.nch, percentChange: t.pch, }, true, true ); //addCloseLine() addCustomLabel(t.p) } } } } catch (e) { //console.error("Issues updating mini widget") } } var TENotifications = 0; function TENotification(_title, _text, _url, _importance) { TENotifications++; console.log("IO => Notification => ", _title, _text, _url, _importance, TENotifications); if (TENotifications > 2 & _importance <= 1) return; if (TENotifications > 4 & _importance <= 2) return; var IsDesktop = !1; var _titleHTML = 'ALERT'; var _alertType = 'NEWS'; var _color = "#5bc0de"; if (_importance > 0) { _alertType = 'CALENDAR'; if (_importance > 1) { IsDesktop = !0; _color = '#5cb85c'; if (_importance > 2) _color = '#d9534f' } } if (TELanguage == '') { upsertNotification({ title: _title, text: _text, url: _url, importance: _importance }, false, true); } _titleHTML = '<div style="padding-bottom:10px; font-size: 11px;color: #fff; font-weight: bold;"><span style="background-color: #000; padding: 3px;">' + _alertType + '</span><span style="background-color: ' + _color + '; padding: 3px;">ALERT</span></div>'; var _textHTML = _text; if (_text && _text.length > 200) { console.log("Trim text"); _textHTML = _text.substring(0, 200) + '...'; _textHTML += ' <a style="text-decoration: underline;" target="_new" href="' + _url + '">More</a>' } else if (_text) { _textHTML += ' <a style="text-decoration: underline;" target="_new" href="' + _url + '">More</a>' } PNotify.desktop.permission(); (new PNotify({ title: _titleHTML, text: _textHTML, hide: !0, animation: 'fade', shadow: !0, icon: !1, mouse_reset: !1, delay: 20000, buttons: { sticker: !1, closer_hover: !1 }, addclass: 'custom', })).get().click(function (e) { if ($('.ui-pnotify-closer, .ui-pnotify-closer *').is(e.target)) { console.log("Closed Notification"); return } window.location = _url }); if (IsDesktop) { var _tag = _url + "?v=" + new Date().toISOString().slice(0, 10).replace(/-/g, ""); console.log("PNotify tag", _tag); (new PNotify({ title: _titleHTML, text: _textHTML, hide: !1, animation: 'fade', shadow: !0, icon: !1, mouse_reset: !1, hide: !0, delay: 20000, buttons: { sticker: !1, closer_hover: !1 }, addclass: 'custom', type: 'info', desktop: { desktop: IsDesktop, title: 'TRADING ECONOMICS', text: _text, tag: _tag, fallback: !1 } })).get().click(function (e) { if ($('.ui-pnotify-closer, .ui-pnotify-closer *').is(e.target)) { console.log("Closed Notification"); return } window.location = _url }) } } function TECalendarRowUpdate(c) { console.log("UPDATE CALENDAR ROW"); console.log(c); var $row = $('tr[data-id="' + c.CalendarId + '"]'); console.log($row); var $td = $row.find('span#actual'); console.log($td); $td.text(c.Actual); console.log(c.Actual); console.log($td.text); bg = '#5bc0de'; $td.css("backgroundColor", bg); color = c.Actual.toString().indexOf("-") ? 'darkgreen' : 'darkred'; $td.css("color", color); $row.find('span#previous').text(c.Previous); $row.find('img#incoming').css("display", 'none'); setInterval(function () { $td.css("backgroundColor", '#ffffff') }, 2000) } socket.on('calendar', function (c) { console.log("IO CALENDAR") c = decryptMessage(c) console.log(c); if (c.Importance >= 1) { var _title = c.Country.trim() + ' ' + c.Event.trim(); var _text = _title; if (c.Actual != null && c.Actual != '') _text += ' reported at ' + c.Actual + '. '; if (c.Forecast != null && c.Forecast != '') _text += 'Consensus was ' + c.Forecast + '. '; if (c.Previous != null && c.Previous != '') _text += 'Previously at ' + c.Previous + '.'; var _url = 'https://tradingeconomics.com' + c.URL; if (TE_URL.indexOf("calendar") > -1 || (TELanguage != null && TELanguage.length > 0 && TE_URL == '/')) TECalendarRowUpdate(c); TENotification(_title, _text, _url, c.Importance) } }); socket.on('stream', function (j) { console.log("IO STREAM") j = decryptMessage(j) console.log(j); var _title = j.title; var _description = j.description; var _url = j.url; if (_title && _description && _url) { TENotification(_title, _description, _url, 0) } }); var KILL_SOCKET_AFTER_IDLE = 1000 * 60 * 30; var IS_RELOAD_REQUIRED = !1; var IS_QUESTION_OPEN = !1; var IS_CONNECTED = !1; var LAST_VISIBLE = new Date().getTime(); if (TE_URL.indexOf("calendar") > -1 || TE_URL.indexOf("/currency") > -1 || TE_URL.indexOf("/stock-market") > -1 || TE_URL.indexOf("/commodity/") > -1 || TE_URL.indexOf("/government-bond-yield") > -1 || TE_URL.indexOf("stream") > -1 || TE_URL.indexOf("/currencies") > -1 || TE_URL.indexOf("/stocks") > -1 || TE_URL.indexOf("/bonds") > -1 || TE_URL.indexOf("/commodities") > -1) { KILL_SOCKET_AFTER_IDLE = 1000 * 60 * 60; IS_RELOAD_REQUIRED = !0 } // To be users in market pages ex aapl:us function UpdateMarketTick(t) { if (t.state && t.state == 'closed') { console.log('market is closed'); } var s = t.s; if (!s || s.toLowerCase() != symbol.toLowerCase()) { return; } $('#market_last').html(t.p); $('#market_daily_chg').html(t.nch + ' '); $('#market_daily_Pchg').html(t.pch + '%'); if (t.nch > 0) { $('#market_chg_arrow').attr('class', 'market-positive-image'); $('#market_daily_chg').css({ color: '#8ecf61' }); $('#market_daily_Pchg').css({ color: '#8ecf61' }); } else { $('#market_chg_arrow').attr('class', 'market-negative-image'); $('#market_daily_chg').css({ color: '#ed3b3b' }); $('#market_daily_Pchg').css({ color: '#ed3b3b' }); } } function saveSocketNetworkBW() { console.log("Socket check if alive"); setInterval(function () { if (typeof document == 'undefined' || !document) { console.log("ws: undefined"); return LAST_VISIBLE = new Date().getTime() } if (typeof document.hidden != 'boolean') { console.log("ws: hidden"); return LAST_VISIBLE = new Date().getTime() } if (!document.hidden) { console.log("ws: live"); if (!IS_CONNECTED) { console.log('ws: connecting'); socket.connect() } return LAST_VISIBLE = new Date().getTime() } var now = new Date().getTime(); if (now - LAST_VISIBLE > KILL_SOCKET_AFTER_IDLE) { if (IS_CONNECTED) { console.log('ws: disconnecting'); socket.disconnect(); if (IS_RELOAD_REQUIRED && IS_QUESTION_OPEN == !1) { var result = confirm("Please Press Ok to Refresh the Data in this Page"); IS_QUESTION_OPEN = !0; if (result) { IS_QUESTION_OPEN = !1; document.location = document.location.href } } } } }, 1000 * 60) } saveSocketNetworkBW() // pnotify !function (t, i) { "function" == typeof define && define.amd ? define("pnotify", ["jquery"], function (s) { return i(s, t) }) : "object" == typeof exports && "undefined" != typeof module ? module.exports = i(require("jquery"), global || t) : t.PNotify = i(t.jQuery, t) }("undefined" != typeof window ? window : this, function (t, i) { var s = function (i) { var e, o, n = { dir1: "down", dir2: "left", push: "bottom", spacing1: 36, spacing2: 36, context: t("body"), modal: !1 }, a = t(i), r = function () { o = t("body"), c.prototype.options.stack.context = o, a = t(i), a.bind("resize", function () { e && clearTimeout(e), e = setTimeout(function () { c.positionAll(!0) }, 10) }) }, h = function (i) { var s = t("<div />", { class: "ui-pnotify-modal-overlay" }); return s.prependTo(i.context), i.overlay_close && s.click(function () { c.removeStack(i) }), s }, c = function (t) { this.state = "initializing", this.timer = null, this.animTimer = null, this.styles = null, this.elem = null, this.container = null, this.title_container = null, this.text_container = null, this.animating = !1, this.timerHide = !1, this.parseOptions(t), this.init() }; return t.extend(c.prototype, { version: "3.2.0", options: { title: !1, title_escape: !1, text: !1, text_escape: !1, styling: "brighttheme", addclass: "", cornerclass: "", auto_display: !0, width: "300px", min_height: "16px", type: "notice", icon: !0, animation: "fade", animate_speed: "normal", shadow: !0, hide: !0, delay: 8e3, mouse_reset: !0, remove: !0, insert_brs: !0, destroy: !0, stack: n }, modules: {}, runModules: function (t, i) { var s; for (var e in this.modules) s = "object" == typeof i && e in i ? i[e] : i, "function" == typeof this.modules[e][t] && (this.modules[e].notice = this, this.modules[e].options = "object" == typeof this.options[e] ? this.options[e] : {}, this.modules[e][t](this, "object" == typeof this.options[e] ? this.options[e] : {}, s)) }, init: function () { var i = this; return this.modules = {}, t.extend(!0, this.modules, c.prototype.modules), "object" == typeof this.options.styling ? this.styles = this.options.styling : this.styles = c.styling[this.options.styling], this.elem = t("<div />", { class: "ui-pnotify " + this.options.addclass, css: { display: "none" }, "aria-live": "assertive", "aria-role": "alertdialog", mouseenter: function (t) { if (i.options.mouse_reset && "out" === i.animating) { if (!i.timerHide) return; i.cancelRemove() } i.options.hide && i.options.mouse_reset && i.cancelRemove() }, mouseleave: function (t) { i.options.hide && i.options.mouse_reset && "out" !== i.animating && i.queueRemove(), c.positionAll() } }), "fade" === this.options.animation && this.elem.addClass("ui-pnotify-fade-" + this.options.animate_speed), this.container = t("<div />", { class: this.styles.container + " ui-pnotify-container " + ("error" === this.options.type ? this.styles.error : "info" === this.options.type ? this.styles.info : "success" === this.options.type ? this.styles.success : this.styles.notice), role: "alert" }).appendTo(this.elem), "" !== this.options.cornerclass && this.container.removeClass("ui-corner-all").addClass(this.options.cornerclass), this.options.shadow && this.container.addClass("ui-pnotify-shadow"), !1 !== this.options.icon && t("<div />", { class: "ui-pnotify-icon" }).append(t("<span />", { class: !0 === this.options.icon ? "error" === this.options.type ? this.styles.error_icon : "info" === this.options.type ? this.styles.info_icon : "success" === this.options.type ? this.styles.success_icon : this.styles.notice_icon : this.options.icon })).prependTo(this.container), this.title_container = t("<h4 />", { class: "ui-pnotify-title" }).appendTo(this.container), !1 === this.options.title ? this.title_container.hide() : this.options.title_escape ? this.title_container.text(this.options.title) : this.title_container.html(this.options.title), this.text_container = t("<div />", { class: "ui-pnotify-text", "aria-role": "alert" }).appendTo(this.container), !1 === this.options.text ? this.text_container.hide() : this.options.text_escape ? this.text_container.text(this.options.text) : this.text_container.html(this.options.insert_brs ? String(this.options.text).replace(/\n/g, "<br />") : this.options.text), "string" == typeof this.options.width && this.elem.css("width", this.options.width), "string" == typeof this.options.min_height && this.container.css("min-height", this.options.min_height), "top" === this.options.stack.push ? c.notices = t.merge([this], c.notices) : c.notices = t.merge(c.notices, [this]), "top" === this.options.stack.push && this.queuePosition(!1, 1), this.options.stack.animation = !1, this.runModules("init"), this.state = "closed", this.options.auto_display && this.open(), this }, update: function (i) { var s = this.options; return this.parseOptions(s, i), this.elem.removeClass("ui-pnotify-fade-slow ui-pnotify-fade-normal ui-pnotify-fade-fast"), "fade" === this.options.animation && this.elem.addClass("ui-pnotify-fade-" + this.options.animate_speed), this.options.cornerclass !== s.cornerclass && this.container.removeClass("ui-corner-all " + s.cornerclass).addClass(this.options.cornerclass), this.options.shadow !== s.shadow && (this.options.shadow ? this.container.addClass("ui-pnotify-shadow") : this.container.removeClass("ui-pnotify-shadow")), !1 === this.options.addclass ? this.elem.removeClass(s.addclass) : this.options.addclass !== s.addclass && this.elem.removeClass(s.addclass).addClass(this.options.addclass), !1 === this.options.title ? this.title_container.slideUp("fast") : this.options.title !== s.title && (this.options.title_escape ? this.title_container.text(this.options.title) : this.title_container.html(this.options.title), !1 === s.title && this.title_container.slideDown(200)), !1 === this.options.text ? this.text_container.slideUp("fast") : this.options.text !== s.text && (this.options.text_escape ? this.text_container.text(this.options.text) : this.text_container.html(this.options.insert_brs ? String(this.options.text).replace(/\n/g, "<br />") : this.options.text), !1 === s.text && this.text_container.slideDown(200)), this.options.type !== s.type && this.container.removeClass(this.styles.error + " " + this.styles.notice + " " + this.styles.success + " " + this.styles.info).addClass("error" === this.options.type ? this.styles.error : "info" === this.options.type ? this.styles.info : "success" === this.options.type ? this.styles.success : this.styles.notice), (this.options.icon !== s.icon || !0 === this.options.icon && this.options.type !== s.type) && (this.container.find("div.ui-pnotify-icon").remove(), !1 !== this.options.icon && t("<div />", { class: "ui-pnotify-icon" }).append(t("<span />", { class: !0 === this.options.icon ? "error" === this.options.type ? this.styles.error_icon : "info" === this.options.type ? this.styles.info_icon : "success" === this.options.type ? this.styles.success_icon : this.styles.notice_icon : this.options.icon })).prependTo(this.container)), this.options.width !== s.width && this.elem.animate({ width: this.options.width }), this.options.min_height !== s.min_height && this.container.animate({ minHeight: this.options.min_height }), this.options.hide ? s.hide || this.queueRemove() : this.cancelRemove(), this.queuePosition(!0), this.runModules("update", s), this }, open: function () { this.state = "opening", this.runModules("beforeOpen"); var t = this; return this.elem.parent().length || this.elem.appendTo(this.options.stack.context ? this.options.stack.context : o), "top" !== this.options.stack.push && this.position(!0), this.animateIn(function () { t.queuePosition(!0), t.options.hide && t.queueRemove(), t.state = "open", t.runModules("afterOpen") }), this }, remove: function (s) { this.state = "closing", this.timerHide = !!s, this.runModules("beforeClose"); var e = this; return this.timer && (i.clearTimeout(this.timer), this.timer = null), this.animateOut(function () { if (e.state = "closed", e.runModules("afterClose"), e.queuePosition(!0), e.options.remove && e.elem.detach(), e.runModules("beforeDestroy"), e.options.destroy && null !== c.notices) { var i = t.inArray(e, c.notices); -1 !== i && c.notices.splice(i, 1) } e.runModules("afterDestroy") }), this }, get: function () { return this.elem }, parseOptions: function (i, s) { this.options = t.extend(!0, {}, c.prototype.options), this.options.stack = c.prototype.options.stack; for (var e, o = [i, s], n = 0; n < o.length && void 0 !== (e = o[n]); n++)if ("object" != typeof e) this.options.text = e; else for (var a in e) this.modules[a] ? t.extend(!0, this.options[a], e[a]) : this.options[a] = e[a] }, animateIn: function (t) { this.animating = "in"; var i = this, s = function () { i.animTimer && clearTimeout(i.animTimer), "in" === i.animating && (i.elem.is(":visible") ? (t && t.call(), i.animating = !1) : i.animTimer = setTimeout(s, 40)) }; "fade" === this.options.animation ? (this.elem.one("webkitTransitionEnd mozTransitionEnd MSTransitionEnd oTransitionEnd transitionend", s).addClass("ui-pnotify-in"), this.elem.css("opacity"), this.elem.addClass("ui-pnotify-fade-in"), this.animTimer = setTimeout(s, 650)) : (this.elem.addClass("ui-pnotify-in"), s()) }, animateOut: function (i) { this.animating = "out"; var s = this, e = function () { if (s.animTimer && clearTimeout(s.animTimer), "out" === s.animating) if ("0" != s.elem.css("opacity") && s.elem.is(":visible")) s.animTimer = setTimeout(e, 40); else { if (s.elem.removeClass("ui-pnotify-in"), s.options.stack.overlay) { var o = !1; t.each(c.notices, function (t, i) { i != s && i.options.stack === s.options.stack && "closed" != i.state && (o = !0) }), o || s.options.stack.overlay.hide() } i && i.call(), s.animating = !1 } }; "fade" === this.options.animation ? (this.elem.one("webkitTransitionEnd mozTransitionEnd MSTransitionEnd oTransitionEnd transitionend", e).removeClass("ui-pnotify-fade-in"), this.animTimer = setTimeout(e, 650)) : (this.elem.removeClass("ui-pnotify-in"), e()) }, position: function (t) { var i = this.options.stack, s = this.elem; if (void 0 === i.context && (i.context = o), i) { "number" != typeof i.nextpos1 && (i.nextpos1 = i.firstpos1), "number" != typeof i.nextpos2 && (i.nextpos2 = i.firstpos2), "number" != typeof i.addpos2 && (i.addpos2 = 0); var e = !s.hasClass("ui-pnotify-in"); if (!e || t) { i.modal && (i.overlay ? i.overlay.show() : i.overlay = h(i)), s.addClass("ui-pnotify-move"); var n, r, c; switch (i.dir1) { case "down": c = "top"; break; case "up": c = "bottom"; break; case "left": c = "right"; break; case "right": c = "left" }n = parseInt(s.css(c).replace(/(?:\..*|[^0-9.])/g, "")), isNaN(n) && (n = 0), void 0 !== i.firstpos1 || e || (i.firstpos1 = n, i.nextpos1 = i.firstpos1); var p; switch (i.dir2) { case "down": p = "top"; break; case "up": p = "bottom"; break; case "left": p = "right"; break; case "right": p = "left" }switch (r = parseInt(s.css(p).replace(/(?:\..*|[^0-9.])/g, "")), isNaN(r) && (r = 0), void 0 !== i.firstpos2 || e || (i.firstpos2 = r, i.nextpos2 = i.firstpos2), ("down" === i.dir1 && i.nextpos1 + s.height() > (i.context.is(o) ? a.height() : i.context.prop("scrollHeight")) || "up" === i.dir1 && i.nextpos1 + s.height() > (i.context.is(o) ? a.height() : i.context.prop("scrollHeight")) || "left" === i.dir1 && i.nextpos1 + s.width() > (i.context.is(o) ? a.width() : i.context.prop("scrollWidth")) || "right" === i.dir1 && i.nextpos1 + s.width() > (i.context.is(o) ? a.width() : i.context.prop("scrollWidth"))) && (i.nextpos1 = i.firstpos1, i.nextpos2 += i.addpos2 + (void 0 === i.spacing2 ? 25 : i.spacing2), i.addpos2 = 0), "number" == typeof i.nextpos2 && (i.animation ? s.css(p, i.nextpos2 + "px") : (s.removeClass("ui-pnotify-move"), s.css(p, i.nextpos2 + "px"), s.css(p), s.addClass("ui-pnotify-move"))), i.dir2) { case "down": case "up": s.outerHeight(!0) > i.addpos2 && (i.addpos2 = s.height()); break; case "left": case "right": s.outerWidth(!0) > i.addpos2 && (i.addpos2 = s.width()) }switch ("number" == typeof i.nextpos1 && (i.animation ? s.css(c, i.nextpos1 + "px") : (s.removeClass("ui-pnotify-move"), s.css(c, i.nextpos1 + "px"), s.css(c), s.addClass("ui-pnotify-move"))), i.dir1) { case "down": case "up": i.nextpos1 += s.height() + (void 0 === i.spacing1 ? 25 : i.spacing1); break; case "left": case "right": i.nextpos1 += s.width() + (void 0 === i.spacing1 ? 25 : i.spacing1) } } return this } }, queuePosition: function (t, i) { return e && clearTimeout(e), i || (i = 10), e = setTimeout(function () { c.positionAll(t) }, i), this }, cancelRemove: function () { return this.timer && i.clearTimeout(this.timer), this.animTimer && i.clearTimeout(this.animTimer), "closing" === this.state && (this.state = "open", this.animating = !1, this.elem.addClass("ui-pnotify-in"), "fade" === this.options.animation && this.elem.addClass("ui-pnotify-fade-in")), this }, queueRemove: function () { var t = this; return this.cancelRemove(), this.timer = i.setTimeout(function () { t.remove(!0) }, isNaN(this.options.delay) ? 0 : this.options.delay), this } }), t.extend(c, { notices: [], reload: s, removeAll: function () { t.each(c.notices, function (t, i) { i.remove && i.remove(!1) }) }, removeStack: function (i) { t.each(c.notices, function (t, s) { s.remove && s.options.stack === i && s.remove(!1) }) }, positionAll: function (i) { if (e && clearTimeout(e), e = null, c.notices && c.notices.length) t.each(c.notices, function (t, s) { var e = s.options.stack; e && (e.overlay && e.overlay.hide(), e.nextpos1 = e.firstpos1, e.nextpos2 = e.firstpos2, e.addpos2 = 0, e.animation = i) }), t.each(c.notices, function (t, i) { i.position() }); else { var s = c.prototype.options.stack; s && (delete s.nextpos1, delete s.nextpos2) } }, styling: { brighttheme: { container: "brighttheme", notice: "brighttheme-notice", notice_icon: "brighttheme-icon-notice", info: "brighttheme-info", info_icon: "brighttheme-icon-info", success: "brighttheme-success", success_icon: "brighttheme-icon-success", error: "brighttheme-error", error_icon: "brighttheme-icon-error" }, bootstrap3: { container: "alert", notice: "alert-warning", notice_icon: "glyphicon glyphicon-exclamation-sign", info: "alert-info", info_icon: "glyphicon glyphicon-info-sign", success: "alert-success", success_icon: "bi bi-check-lg-sign", error: "alert-danger", error_icon: "glyphicon glyphicon-warning-sign" } } }), c.styling.fontawesome = t.extend({}, c.styling.bootstrap3), t.extend(c.styling.fontawesome, { notice_icon: "fa fa-exclamation-circle", info_icon: "fa fa-info", success_icon: "fa fa-check", error_icon: "fa fa-warning" }), i.document.body ? r() : t(r), c }; return s(i) }); !function (o, s) { "function" == typeof define && define.amd ? define("pnotify.buttons", ["jquery", "pnotify"], s) : "object" == typeof exports && "undefined" != typeof module ? module.exports = s(require("jquery"), require("./pnotify")) : s(o.jQuery, o.PNotify) }("undefined" != typeof window ? window : this, function (o, s) { return s.prototype.options.buttons = { closer: !0, closer_hover: !0, sticker: !0, sticker_hover: !0, show_on_nonblock: !1, labels: { close: "Close", stick: "Stick", unstick: "Unstick" }, classes: { closer: null, pin_up: null, pin_down: null } }, s.prototype.modules.buttons = { init: function (s, i) { var n = this; s.elem.on({ mouseenter: function (o) { !n.options.sticker || s.options.nonblock && s.options.nonblock.nonblock && !n.options.show_on_nonblock || n.sticker.trigger("pnotify:buttons:toggleStick").css("visibility", "visible"), !n.options.closer || s.options.nonblock && s.options.nonblock.nonblock && !n.options.show_on_nonblock || n.closer.css("visibility", "visible") }, mouseleave: function (o) { n.options.sticker_hover && n.sticker.css("visibility", "d-none"), n.options.closer_hover && n.closer.css("visibility", "d-none") } }), this.sticker = o("<div />", { class: "ui-pnotify-sticker", "aria-role": "button", "aria-pressed": s.options.hide ? "false" : "true", tabindex: "0", title: s.options.hide ? i.labels.stick : i.labels.unstick, css: { cursor: "pointer", visibility: i.sticker_hover ? "d-none" : "visible" }, click: function () { s.options.hide = !s.options.hide, s.options.hide ? s.queueRemove() : s.cancelRemove(), o(this).trigger("pnotify:buttons:toggleStick") } }).bind("pnotify:buttons:toggleStick", function () { var i = null === n.options.classes.pin_up ? s.styles.pin_up : n.options.classes.pin_up, e = null === n.options.classes.pin_down ? s.styles.pin_down : n.options.classes.pin_down; o(this).attr("title", s.options.hide ? n.options.labels.stick : n.options.labels.unstick).children().attr("class", "").addClass(s.options.hide ? i : e).attr("aria-pressed", s.options.hide ? "false" : "true") }).append("<span />").trigger("pnotify:buttons:toggleStick").prependTo(s.container), (!i.sticker || s.options.nonblock && s.options.nonblock.nonblock && !i.show_on_nonblock) && this.sticker.css("display", "none"), this.closer = o("<div />", { class: "ui-pnotify-closer", "aria-role": "button", tabindex: "0", title: i.labels.close, css: { cursor: "pointer", visibility: i.closer_hover ? "d-none" : "visible" }, click: function () { s.remove(!1), n.sticker.css("visibility", "d-none"), n.closer.css("visibility", "d-none") } }).append(o("<span />", { class: null === i.classes.closer ? s.styles.closer : i.classes.closer })).prependTo(s.container), (!i.closer || s.options.nonblock && s.options.nonblock.nonblock && !i.show_on_nonblock) && this.closer.css("display", "none") }, update: function (o, s) { !s.closer || o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock ? this.closer.css("display", "none") : s.closer && this.closer.css("display", "block"), !s.sticker || o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock ? this.sticker.css("display", "none") : s.sticker && this.sticker.css("display", "block"), this.sticker.trigger("pnotify:buttons:toggleStick"), this.closer.find("span").attr("class", "").addClass(null === s.classes.closer ? o.styles.closer : s.classes.closer), s.sticker_hover ? this.sticker.css("visibility", "d-none") : o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock || this.sticker.css("visibility", "visible"), s.closer_hover ? this.closer.css("visibility", "d-none") : o.options.nonblock && o.options.nonblock.nonblock && !s.show_on_nonblock || this.closer.css("visibility", "visible") } }, o.extend(s.styling.brighttheme, { closer: "brighttheme-icon-closer", pin_up: "brighttheme-icon-sticker", pin_down: "brighttheme-icon-sticker brighttheme-icon-stuck" }), o.extend(s.styling.bootstrap3, { closer: "bi bi-x-lg", pin_up: "glyphicon glyphicon-pause", pin_down: "glyphicon glyphicon-play" }), o.extend(s.styling.fontawesome, { closer: "fa fa-times", pin_up: "fa fa-pause", pin_down: "fa fa-play" }), s }); !function (i, t) { "function" == typeof define && define.amd ? define("pnotify.desktop", ["jquery", "pnotify"], t) : "object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("jquery"), require("./pnotify")) : t(i.jQuery, i.PNotify) }("undefined" != typeof window ? window : this, function (i, t) { var o, n = function (i, t) { return (n = "Notification" in window ? function (i, t) { return new Notification(i, t) } : "mozNotification" in navigator ? function (i, t) { return navigator.mozNotification.createNotification(i, t.body, t.icon).show() } : "webkitNotifications" in window ? function (i, t) { return window.webkitNotifications.createNotification(t.icon, i, t.body) } : function (i, t) { return null })(i, t) }; return t.prototype.options.desktop = { desktop: !1, fallback: !0, icon: null, tag: null, title: null, text: null }, t.prototype.modules.desktop = { genNotice: function (i, t) { null === t.icon ? this.icon = "https://sciactive.com/pnotify/includes/desktop/" + i.options.type + ".png" : !1 === t.icon ? this.icon = null : this.icon = t.icon, null !== this.tag && null === t.tag || (this.tag = null === t.tag ? "PNotify-" + Math.round(1e6 * Math.random()) : t.tag), i.desktop = n(t.title || i.options.title, { icon: this.icon, body: t.text || i.options.text, tag: this.tag }), !("close" in i.desktop) && "cancel" in i.desktop && (i.desktop.close = function () { i.desktop.cancel() }), i.desktop.onclick = function () { i.elem.trigger("click") }, i.desktop.onclose = function () { "closing" !== i.state && "closed" !== i.state && i.remove() } }, init: function (i, n) { if (n.desktop) { if (0 !== (o = t.desktop.checkPermission())) return void (n.fallback || (i.options.auto_display = !1)); this.genNotice(i, n) } }, update: function (i, t, n) { 0 !== o && t.fallback || !t.desktop || this.genNotice(i, t) }, beforeOpen: function (i, t) { 0 !== o && t.fallback || !t.desktop || i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in") }, afterOpen: function (i, t) { 0 !== o && t.fallback || !t.desktop || (i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in"), "show" in i.desktop && i.desktop.show()) }, beforeClose: function (i, t) { 0 !== o && t.fallback || !t.desktop || i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in") }, afterClose: function (i, t) { 0 !== o && t.fallback || !t.desktop || (i.elem.css({ left: "-10000px" }).removeClass("ui-pnotify-in"), "close" in i.desktop && i.desktop.close()) } }, t.desktop = { permission: function () { "undefined" != typeof Notification && "requestPermission" in Notification ? Notification.requestPermission() : "webkitNotifications" in window && window.webkitNotifications.requestPermission() }, checkPermission: function () { return "undefined" != typeof Notification && "permission" in Notification ? "granted" === Notification.permission ? 0 : 1 : "webkitNotifications" in window && 0 == window.webkitNotifications.checkPermission() ? 0 : 1 } }, o = t.desktop.checkPermission(), t }); !function (i, o) { "function" == typeof define && define.amd ? define("pnotify.mobile", ["jquery", "pnotify"], o) : "object" == typeof exports && "undefined" != typeof module ? module.exports = o(require("jquery"), require("./pnotify")) : o(i.jQuery, i.PNotify) }("undefined" != typeof window ? window : this, function (i, o) { return o.prototype.options.mobile = { swipe_dismiss: !0, styling: !0 }, o.prototype.modules.mobile = { init: function (i, o) { var t = this, e = null, n = null, s = null; this.swipe_dismiss = o.swipe_dismiss, this.doMobileStyling(i, o), i.elem.on({ touchstart: function (o) { t.swipe_dismiss && (e = o.originalEvent.touches[0].screenX, s = i.elem.width(), i.container.css("left", "0")) }, touchmove: function (o) { if (e && t.swipe_dismiss) { var a = o.originalEvent.touches[0].screenX; n = a - e; var c = (1 - Math.abs(n) / s) * i.options.opacity; i.elem.css("opacity", c), i.container.css("left", n) } }, touchend: function () { if (e && t.swipe_dismiss) { if (Math.abs(n) > 40) { var o = n < 0 ? -2 * s : 2 * s; i.elem.animate({ opacity: 0 }, 100), i.container.animate({ left: o }, 100), i.remove() } else i.elem.animate({ opacity: i.options.opacity }, 100), i.container.animate({ left: 0 }, 100); e = null, n = null, s = null } }, touchcancel: function () { e && t.swipe_dismiss && (i.elem.animate({ opacity: i.options.opacity }, 100), i.container.animate({ left: 0 }, 100), e = null, n = null, s = null) } }) }, update: function (i, o) { this.swipe_dismiss = o.swipe_dismiss, this.doMobileStyling(i, o) }, doMobileStyling: function (o, t) { t.styling ? (o.elem.addClass("ui-pnotify-mobile-able"), i(window).width() <= 480 ? (o.options.stack.mobileOrigSpacing1 || (o.options.stack.mobileOrigSpacing1 = o.options.stack.spacing1, o.options.stack.mobileOrigSpacing2 = o.options.stack.spacing2), o.options.stack.spacing1 = 0, o.options.stack.spacing2 = 0) : (o.options.stack.mobileOrigSpacing1 || o.options.stack.mobileOrigSpacing2) && (o.options.stack.spacing1 = o.options.stack.mobileOrigSpacing1, delete o.options.stack.mobileOrigSpacing1, o.options.stack.spacing2 = o.options.stack.mobileOrigSpacing2, delete o.options.stack.mobileOrigSpacing2)) : (o.elem.removeClass("ui-pnotify-mobile-able"), o.options.stack.mobileOrigSpacing1 && (o.options.stack.spacing1 = o.options.stack.mobileOrigSpacing1, delete o.options.stack.mobileOrigSpacing1), o.options.stack.mobileOrigSpacing2 && (o.options.stack.spacing2 = o.options.stack.mobileOrigSpacing2, delete o.options.stack.mobileOrigSpacing2)) } }, o }); // Test //TE_UpdateTable({ "s": "NDX:IND", "p": 15274.39, "nch": -199.53, "pch": -1.29, "type": "index", "state": "open", "dstate": "open" }, false) //TEST notificationList /*setTimeout(() => { TENotification("United States Core Inflation Rate YoY", "United States Core Inflation Rate YoY reported at 3.3%. Consensus was 3.4%. Previously at 3.4%", "/", "3") }, 25000) setTimeout(() => { TENotification("United States CPI", "United States CPI reported at 314.18. Consensus was 314.63. Previously at 314.07.", "/", "3") }, 30001) setTimeout(() => { TENotification("United States Inflation Rate YoY", "United States Inflation Rate YoY reported at 3.0%. Consensus was 3.1%. Previously at 3.3%.", "/", "3") }, 35002) setTimeout(() => { TENotification("United States Inflation Rate MoM", "United States Inflation Rate MoM reported at -0.1%. Consensus was 0.1%. Previously at 0.0%.", "/", "3") }, 40003) setTimeout(() => { TENotification("United States Core Inflation Rate MoM", "United States Core Inflation Rate MoM reported at 0.1%. Consensus was 0.2%. Previously at 0.2%.", "/", "3") }, 45004)*/ }</script> <script> $(function(){ console.log("Heatmap2"); //if (!IsDarkMode && window.location.pathname.length <= 1 ) return var IsDarkModeByForce = false; if (window.location.pathname.length <= 1 || window.location.pathname.indexOf("matrix") > -1) IsDarkModeByForce = true; function shadeColor2(color, percent) { var f = parseInt(color.slice(1), 16), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = f >> 16, G = f >> 8 & 0x00FF, B = f & 0x0000FF; return "#" + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1); } function colorMyTable() { console.log("Heatmap2 - ColorMyTable") var table = $(".table-heatmap"); var tbody = table.find('tbody'); var _columns = {}; table.find('thead').find('tr').find('th').each(function (i, th) { if ($(th).attr('data-heatmap')) { _columns[i] = { 'index': i, 'limit': $(th).attr('data-heatmap-limit'), 'upColor': $(th).attr('data-heatmap-upcolor') || '#f93639', 'dnColor': $(th).attr('data-heatmap-dncolor') || '#34d65f' }; } }); $(tbody).find('tr').each(function (i, row) { var tdArr = $(row).find('td'); for (var key in _columns) { var thisColumn = _columns[key], td; if (!(td = tdArr[key])) { continue; } var value = $(td).attr('data-heatmap-value') || Number($(td).html().replace('%', '')); if (!value) { //console.log("no value ...", key); continue; } var range = Math.floor(Math.abs(value) / (thisColumn.limit / 10)); if (range > 10) range = 10; var percentToShade = (10 - range) / 10; if (TEComparable == -1 || TEComparable == 2) { thisColumn.upColor = '#34d65f'; thisColumn.dnColor = '#f93639'; } var color = shadeColor2(value < 0 ? thisColumn.upColor : thisColumn.dnColor, percentToShade); //console.log(value, percentToShade) if (IsDarkMode || IsDarkModeByForce) { if ($(td).children().length > 0) $(td).children().css({ 'color': color }); else $(td).css({ 'color': color }); } else $(td).css({ 'background-color': color}); } }); } colorMyTable(); setInterval(colorMyTable, 60 * 1000); }); </script> <script>/*! sortable.js 0.8.0 */(function () { var a, b, c, d, e, g; a = "table[data-sortable]", d = /^-?[£$¤]?[\d,.]+%?$/, g = /^\s+|\s+$/g, c = ["click"], b = function (a, b, c) { return null != a.addEventListener ? a.addEventListener(b, c, !1) : a.attachEvent("on" + b, c) }, e = { init: function (b) { var c, d, f, g, h; for (null == b && (b = {}), null == b.selector && (b.selector = a), d = document.querySelectorAll(b.selector), h = [], f = 0, g = d.length; g > f; f++)c = d[f], h.push(e.initTable(c)); return h }, initTable: function (a) { var b, c, d, f, g, h; if (1 === (null != (h = a.tHead) ? h.rows.length : void 0) && "true" !== a.getAttribute("data-sortable-initialized")) { for (a.setAttribute("data-sortable-initialized", "true"), d = a.querySelectorAll("th"), b = f = 0, g = d.length; g > f; b = ++f)c = d[b], "false" !== c.getAttribute("data-sortable") && e.setupClickableTH(a, c, b); return a } }, setupClickableTH: function (a, d, f) { var g, h, i, j, k, l; for (i = e.getColumnType(a, f), h = function (b) { var c, g, h, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D; if (b.handled === !0) return !1; for (b.handled = !0, m = "true" === this.getAttribute("data-sorted"), n = this.getAttribute("data-sorted-direction"), h = m ? "ascending" === n ? "descending" : "ascending" : i.defaultSortDirection, p = this.parentNode.querySelectorAll("th"), s = 0, w = p.length; w > s; s++)d = p[s], d.setAttribute("data-sorted", "false"), d.removeAttribute("data-sorted-direction"); if (this.setAttribute("data-sorted", "true"), this.setAttribute("data-sorted-direction", h), o = a.tBodies[0], l = [], m) { for (D = o.rows, v = 0, z = D.length; z > v; v++)g = D[v], l.push(g); for (l.reverse(), B = 0, A = l.length; A > B; B++)k = l[B], o.appendChild(k) } else { for (r = null != i.compare ? i.compare : function (a, b) { return b - a }, c = function (a, b) { return a[0] === b[0] ? a[2] - b[2] : i.reverse ? r(b[0], a[0]) : r(a[0], b[0]) }, C = o.rows, j = t = 0, x = C.length; x > t; j = ++t)k = C[j], q = e.getNodeValue(k.cells[f]), null != i.comparator && (q = i.comparator(q)), l.push([q, k, j]); for (l.sort(c), u = 0, y = l.length; y > u; u++)k = l[u], o.appendChild(k[1]) } return "function" == typeof window.CustomEvent && "function" == typeof a.dispatchEvent ? a.dispatchEvent(new CustomEvent("Sortable.sorted", { bubbles: !0 })) : void 0 }, l = [], j = 0, k = c.length; k > j; j++)g = c[j], l.push(b(d, g, h)); return l }, getColumnType: function (a, b) { var c, d, f, g, h, i, j, k, l, m, n; if (d = null != (l = a.querySelectorAll("th")[b]) ? l.getAttribute("data-sortable-type") : void 0, null != d) return e.typesObject[d]; for (m = a.tBodies[0].rows, h = 0, j = m.length; j > h; h++)for (c = m[h], f = e.getNodeValue(c.cells[b]), n = e.types, i = 0, k = n.length; k > i; i++)if (g = n[i], g.match(f)) return g; return e.typesObject.alpha }, getNodeValue: function (a) { var b; return a ? (b = a.getAttribute("data-value"), null !== b ? b : "undefined" != typeof a.innerText ? a.innerText.replace(g, "") : a.textContent.replace(g, "")) : "" }, setupTypes: function (a) { var b, c, d, f; for (e.types = a, e.typesObject = {}, f = [], c = 0, d = a.length; d > c; c++)b = a[c], f.push(e.typesObject[b.name] = b); return f } }, e.setupTypes([{ name: "numeric", defaultSortDirection: "descending", match: function (a) { return a.match(d) }, comparator: function (a) { return parseFloat(a.replace(/[^0-9.-]/g, ""), 10) || 0 } }, { name: "date", defaultSortDirection: "ascending", reverse: !0, match: function (a) { return !isNaN(Date.parse(a)) }, comparator: function (a) { return Date.parse(a) || 0 } }, { name: "alpha", defaultSortDirection: "ascending", match: function () { return !0 }, compare: function (a, b) { return a.localeCompare(b) } }]), setTimeout(e.init, 0), "function" == typeof define && define.amd ? define(function () { return e }) : "undefined" != typeof exports ? module.exports = e : window.Sortable = e }).call(this);</script> <script type="text/javascript" src="//d3fy651gv2fhd3.cloudfront.net/js/search.min.js?v=20240502" async></script> <script> TENotificationsHistorical = [] TENotificationsNews = [] //console.log('• Notifications Script Loaded - 20240701') setTimeout(() => { getNotificationsFromCookie() loadBellStatus() },1000) function loadBellStatus() { //console.log("• get bell status from cookie") var seenData = false const cookieData = document.cookie.split(';').find(item => item.trim().startsWith('TENewNotifications')); if (cookieData) { seenData = cookieData.split('TENewNotifications=')[1].split(',')[0] } if (seenData == 'true') { //console.log("new notification") $('#notification-new').show() $('#notification-empty').hide() } else { $('#notification-new').hide() $('#notification-empty').show() } } function setNotificationCookieStatus(status) { document.cookie = `TENewNotifications=${status.toString()}; expires=${createExpirationDate('eod')}; path=/`; } function changeIconStatus(isHover) { try { //console.log("change bell") if (TENotificationsHistorical.length > 0 && !isHover) { $('#notification-new').show() $('#notification-empty').hide() setNotificationCookieStatus(true) } else if (TENotificationsNews.length > 0 && !isHover) { $('#notification-new').show() $('#notification-empty').hide() setNotificationCookieStatus(true) } else { $('#notification-new').hide() $('#notification-empty').show() setNotificationCookieStatus(false) } } catch (e) { console.error(e) } } function timeAgo(datetime) { try { const now = new Date(); const diff = now - new Date(datetime); let seconds = Math.floor(diff / 1000); const minuteInSecs = 60; const hourInSecs = minuteInSecs * 60; let timeAgoString; if (seconds < minuteInSecs) { if (seconds == 0) { seconds = 1 } const plural = seconds == 1 ? '' : 's'; timeAgoString = `${seconds} second${plural} ago`; } else if (seconds < hourInSecs) { const minutes = Math.floor(seconds / minuteInSecs); timeAgoString = `${minutes} minutes ago`; } else { const hours = Math.floor(seconds / hourInSecs); const plural = hours > 1 ? 's' : ''; timeAgoString = `${hours} hour${plural} ago`; } return timeAgoString; } catch (e) { console.error(e) } } function createExpirationDate(span) { const expires = new Date(); if (span == '1d') { expires.setDate(expires.getDate() + 1) return expires.toUTCString() } else if (span == '1h') { expires.setHours(expires.getHours() + 1); return expires.toUTCString(); } else if (span == 'eod') { //end of day const expiresTime = new Date(expires.getTime()); expiresTime.setHours(23, 59, 59); return expiresTime.toUTCString(); } } function removeNotificationIndex(i) { try { if (TENotificationsHistorical.length == 0 && TENotificationsNews.length > 0) { TENotificationsNews.splice(i, 1); document.cookie = `TELastNews=${JSON.stringify(TENotificationsNews)}; path=/`; } if (TENotificationsHistorical.length > 0) { TENotificationsHistorical.splice(i, 1); } $('.notification-list').empty(); addNotificationCookie() if (TENotificationsNews.length == 0 || (TENotificationsNews.length == 0 && TENotificationsHistorical.length == 0)) { addEmptyContent() } if (TENotificationsHistorical.length > 0 || TENotificationsNews.length > 0) { upsertNotification(null, true, false) } } catch (e) { console.error(e) } } function addEmptyContent() { try { //console.log("Add Empty Content") const notificationList = $('.notification-list'); notificationList.empty(); //notificationList.append('<div style="display:flex;justify-content:space-between;align-itens:center"><span style="margin-left:18px"><b>Notifications</b></span></div>') let html = `<div class="empty-notificationlist"> <div class="empty-notificationlist-content"> <span>You have no new notifications</span> <br> <i class="bi bi-bell-slash-fill"></i> <br> <div><a href="/stream" title="Show all news" class="empty-notificationlist-more"><div class="btn btn-outline-secondary">All News</div></a></div> </div> </div>`; notificationList.append(html); } catch (e) { console.error(e) } } function addContent() { try { //console.log("AddContent") const notifiList = TENotificationsHistorical.length > 0 ? TENotificationsHistorical : TENotificationsNews; const notificationList = $('.notification-list'); notificationList.empty(); if (notifiList.length > 0) { notificationList.append('<div class="notificationList-first-title"><span style="margin-left:18px"><b>Notifications</b></span><span class="notifications-clean-all" title="Delete all notifications">Clear all</span></div>') for (let i = notifiList.length - 1; i >= 0; i--) { const notification = notifiList[i]; let html = `<div> <div class="card notificationlist-card" style="margin:0;"> <div class="card-body notificationlist-body"> <div class="notificationlist-header"> <div class="notificationlist-header-title"><a href="${notification.url}"><b>${notification.title}</b></a><span class="badge badge-notification-type" style="background-color:${notification.color}">${notification.type}</span></div> <span id="n-${i}" title="Delete" style="cursor:pointer"><i id="cleanIndividualNotif" class="bi bi-trash3"></i></span> </div> <span style="font-size:15px">${notification.text}</span> <div class="notificationlist-footer"> <p>${timeAgo(notification.datetime)}</p> </div> </div> </div> </div>`; notificationList.append(html); $(`#n-${i}`).on('click', function () { removeNotificationIndex(i) }) } notificationList.append('<div class="notificationlist-more-div"><a href="/stream" title="Show more streams" class="notificationlist-more"><div class="btn btn-outline-secondary">More News</div></a></div>') $('.notifications-clean-all').on('click', function () { //console.log("Clicked") notificationList.empty(); if (TENotificationsHistorical.length > 0) { document.cookie = "TENotifications=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/"; TENotificationsHistorical = [] } else if (TENotificationsNews.length > 0) { document.cookie = `TELastNews=[]; path=/`; TENotificationsNews = [] } upsertNotification(null, true, false) }); } } catch (e) { console.error(e) } } function fetchLastNews() { try { //console.log("• Fetch News") TENotificationsNews = [] const newsUrl = '/ws/stream.ashx?start=0&size=3' fetch(newsUrl) .then(response => { if (!response.ok) { console.error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { for (let item of data) { if (item.description.length > 300) { item.description = item.description.substring(0, 300) + ' ...'; let lastPeriodIndex = Math.min(item.description.lastIndexOf('. '), 300); if (lastPeriodIndex !== -1) { item.description = item.description.substring(0, lastPeriodIndex + 1) + '..'; } else { item.description = item.description.substring(0, 300) + '...'; } } TENotificationsNews.unshift({ title: item.title, url: item.url, text: item.description, importance: item.importance, datetime: item.date, type: 'News', color: '#ddd' }) } document.cookie = `TELastNews=${JSON.stringify(TENotificationsNews)}; path=/`; // console.log("• Saved News on Cookies TELastNews") upsertNotification(null, true, false) }) .catch(error => { console.error('Error fetching last news:', error); }); } catch (e) { console.error(e) } } function getNotificationsFromCookie() { try { //console.log("• get Notifications From Cookie") const cookieData = document.cookie.split(';').find(item => item.trim().startsWith('TENotifications')); if (cookieData) { let encodedData = cookieData.split('TENotifications=')[1].split(',') //const decrompressedData = pako.inflate(encodedData, { to: 'string' }); try { TENotificationsHistorical = JSON.parse(encodedData); //console.log(TENotificationsHistorical) if (TENotificationsHistorical.length > 0) { upsertNotification(null, true, false) } } catch (error) { console.error("Error parsing existing cookie data:", error); } } } catch (e) { console.error(e) } } function estimateNotificationSize() { return JSON.stringify(TENotificationsHistorical).length; } function getCookieSize() { try { let safeLoop = 0 const cookies = document.cookie.split(';'); let total = 0 for (const cookie of cookies) { if (safeLoop == 50) { return 0; } const [key, value] = cookie.trim().split('='); if (key !== 'TENotifications') { total = total + JSON.stringify(cookie).length + 2 } safeLoop++ } return total; } catch (e) { console.error(e); } } function manageCookieSize(maxSize) { try { //console.log("• Check threshold of cookies size"); const currentCookieSize = getCookieSize(); const currentNotificationsSize = estimateNotificationSize(); let totalBytes = currentCookieSize + currentNotificationsSize; let nLoopCount = 0; //console.log("• Current Cookies Estimated Size: " + currentCookieSize); //console.log("• With Notifications Cookie Estimated Size: " + currentNotificationsSize); if (totalBytes > maxSize) { while (nLoopCount < 10 && totalBytes > maxSize) { //console.log("---------------------> nLoopCount: " + nLoopCount); TENotificationsHistorical.shift(); totalBytes = currentCookieSize + estimateNotificationSize(); //console.log(`• Notification removed to control cookie size. New size: ${totalBytes} bytes`); if (totalBytes <= maxSize) { //console.log(`• Cookie size is already within limit: ${totalBytes} bytes`); break; } nLoopCount++; } }// else { //console.log(`• Cookie size is within limit: ${totalBytes} bytes`); //} } catch (e) { console.error(e); } } function addNotificationCookie() { try { //console.log("• Add Notifications on Cookie"); const isEmptyNews = TENotificationsNews.length === 0; const isEmptyHistorical = TENotificationsHistorical.length === 0; document.cookie = `TELastNews=${isEmptyNews ? '[]' : JSON.stringify(TENotificationsNews)}; path=/`; manageCookieSize(3400); if (isEmptyHistorical) { document.cookie = `TENotifications=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`; } else { document.cookie = `TENotifications=${JSON.stringify(TENotificationsHistorical)}; expires=${createExpirationDate('1d')}; path=/`; } } catch (e) { console.error(e); } } function createDefaultNotification(n) { return { ...n, datetime: new Date(), type: n.importance > 0 ? 'Calendar' : 'News', color: n.importance > 0 ? '#ffb3ba' : '#ddd', }; } function upsertNotification(n, cookie, fromStream) { try { if (TELanguage != '') { return; } //console.log("-----------------------------------------------> Start of upsert Notification on list flow"); //console.log(`• Dealing with ${JSON.stringify(n)}`); if (!cookie) { const newNotification = createDefaultNotification(n); const existingNotification = TENotificationsHistorical.find(item => item.text === newNotification.text); if (existingNotification) { TENotificationsHistorical.splice(TENotificationsHistorical.indexOf(existingNotification), 1); } TENotificationsHistorical.push(newNotification); } const notificationListContainer = $('.offcanvas-top.notification-list.container'); const notificationList = $('.notification-list'); if (!notificationList.length) { notificationListContainer.append(`<div class="offcanvas-header"></div>`); } if (TENotificationsHistorical.length > 0 || TENotificationsNews.length > 0) { if (fromStream == true) { changeIconStatus(false); setNotificationCookieStatus(true); } if (!cookie) { addNotificationCookie(); } addContent(); } else { addEmptyContent(); } } catch (e) { console.error(e); } } $('.btn-notification-list').on('click', function (event) { //console.log('click') event.preventDefault() let cookieNewsIsPresent = false //console.log("• Check if there is LastNews Cookie") const cookieData = document.cookie.split(';').find(item => item.trim().startsWith('TELastNews')); if (cookieData) { let cookieNews = cookieData.split('TELastNews=')[1].split(',') cookieNewsIsPresent = true TENotificationsNews = JSON.parse(cookieNews) } //console.log(cookieNewsIsPresent) if (TENotificationsHistorical.length == 0 && TENotificationsNews.length == 0 && !cookieNewsIsPresent) { //console.log("IF") $('.offcanvas-top').removeClass("show") $('.offcanvas-top').removeClass("showing") fetchLastNews() } else { if (TENotificationsNews.length > 0 || TENotificationsHistorical.length > 0) { upsertNotification(null, true, false) } else { addEmptyContent() } } changeIconStatus(true) }); </script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-SZ14JCTXWQ"></script> <script> window.dataLayer = window.dataLayer || []; function ga() { dataLayer.push(arguments); } ga('js', new Date()); ga('consent', 'default', { 'ad_personalization': 'granted', 'ad_storage': 'granted', 'ad_user_data': 'granted', 'analytics_storage': 'granted', 'functionality_storage': 'granted', 'personalization_storage': 'granted', 'security_storage': 'granted' }); ga('config', 'G-SZ14JCTXWQ'); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10