HomeIndustryInfrastructure/ The rise and demise of Chinese property firm Evergrande
The rise and demise of Chinese property firm Evergrande
Public protests erupt outside the companys headquarters in Shenzhen and other locations across the country
As fears mount about its future, Evergrande says it is under tremendous pressure and may not be able to meet its liabilities. It warns that negative media coverage and rumours had led to waning confidence and falling property sales during a normally buoyant September selling period.
Debt-mired developer Evergrande is struggling to appease angry homebuyers and investors knocking on its doors for cash taken as deposits for unbuilt homes and promised yields.
Here is a timeline of Evergrandes rise to one of Chinas biggest developers and demise into one of its worst debtors:
Steel-factory worker Xu Jiayin starts Evergrande, targeting millions of middle-class Chinese climbing onto the property ladder across the rapidly urbanising country.
After going public in 2009, Evergrande takes control of Chinese Super League club Guangzhou, renaming Guangzhou Evergrande and spends billions of dollars on foreign players, helping it to win a succession of titles. The company also moves into the dairy, grain and oil businesses and later tries to build an electric car -- kicking off a debt-fuelled spending spree.
Xu becomes the richest person in Asia with a net worth of $43 billion.
In November the first signs of trouble emerge when Chinas central bank adds Evergrande to its list of highly indebted conglomerates to watch, flagging that a potential collapse could cause systemic risks.
Regulators announce caps for three different debt ratios in a scheme dubbed three red lines that tightens lending to the real estate sector.
Evergrande sells 28 percent of its property management unit for $3 billion and starts offloading properties at increasingly steep discounts.
June 2021: Scrutiny on home deposits
As part of a crackdown on the property sector, regulators tighten scrutiny on the controversial practice of taking deposits from homeowners before a house is completed, a major source of funding for developers.
Under the new rules, local governments will set a maximum cap on deposits, hold deposits and release funds to developers in batches after inspecting the progress of projects.
Research firm Capital Economics estimates that Evergrande had 1.3 trillion yuan (more than $207 billion) in pre-sale liabilities at the end of June, equal to roughly 1.4 million homes it had committed to building.
An advertiser sues the company for unpaid dues, the first in a string of cases filed by nervous subcontractors. Work at several construction sites grind to a halt.
Global ratings companies including Fitch, Moodys, and S&P downgrade Evergrandes outlook to negative, making it harder for the troubled firm to borrow money and raising fears of a possible bankruptcy that many fear could reverberate through the worlds number-two economy.
The company says in a stock market filing that its total liabilities have swelled to 1.97 trillion yuan ($305 billion) and that it is facing the risks of defaults on borrowings.
As fears mount about its future, Evergrande says it is under tremendous pressure and may not be able to meet its liabilities. It warns that negative media coverage and rumours had led to waning confidence and falling property sales during a normally buoyant September selling period.
Public protests erupt outside the companys headquarters in Shenzhen and other locations across the country, with angry investors and homebuyers demanding repayments.
Catch all theIndustry NewsBanking Newsand Updates on Live Mint. Download TheMint News Appto get DailyMarket Updates.
Suhail Chandhok appointed CEO of kabaddi team ...
India to face harsher summer with lower water ...
Ajanta Pharma share buyback announced. Price, ...
H3N2 virus changed pattern unexpectedly, its ...
Silicon Valley Banks foibles dont threaten I...
Rupee weakens but still better than Asian peer...
NPS subscriber base rises 23% in a year, asset...
Government holds first consultation on Digital...
Assets under NPS and APY jump 23.45% to ₹8.82...
Soy sauce, processed food adding to increased ...
Download the Mint app and read premium stories
Copyright © 2022 HT Digital Streams Ltd All Right Reserved
slides.length) slideIndex = 1 slides[slideIndex-1].style.display = block; setTimeout(showSlides, 5000); showSlides();
Log in to our website to save your bookmarks. Itll just take a moment.
You are just one step away from creating your watchlist!
Oops! Looks like you have exceeded the limit to bookmark the image. Remove some to bookmark this image.
Your session has expired, please login again.
You are now subscribed to our newsletters. In case you cant find any email from our side, please check the spam folder.
+ email +Edit; let subsExpired = false; if (plan && typeof plan.subscriptions[0].isExpired != undefined && plan.subscriptions[0].isExpired) subsExpired = true; if (plan && plan.subscriptions && plan.subscriptions.length
0 && typeof plan.subscriptions[0].status != undefined && (plan.subscriptions[0].status != cancelled subsExpired) && plan.subscriptions[0].status != cancelled_from_dunning) isSubscribedUser = true; trackDataWa[isSubscribed] = Subscribed; var planData = plan.subscriptions[0]; purchaseSource = planData.source_device; var token = getCookie(token); var currentPlanInfo = ; var planType = ; var planActivateDate = ; var renewText = ; var billingCycleText = ; var nextActivationDate = ; var html = ; if (typeof planData.plan.plan_type != undefined && planData.plan.plan_type != null) planType = planData.plan.plan_type; if (typeof userData.gender != undefined && userData.gender != null) trackDataWa[Gender] = userData.gender; else trackDataWa[Gender] = ; if (typeof userData.registeredAt != undefined && userData.registeredAt != null) trackDataWa[Registered at] = userData.registeredAt; else trackDataWa[Registered at] = ; if (typeof planData.current_term_starts_at != undefined && planData.current_term_starts_at != null) planActivateDate = planData.current_term_starts_at; trackDataWa[Plan] = planData.plan.description + + ; /* current plan info starts */ var planDescription = planData.plan.description; var planName = planData.plan.name; var planPrice = planData.amount; var planInterval = planData.duration; var planUnit = planData.interval_unit; var planCode = planData.plan.plan_code; try customFields = planData.custom_fields; if (typeof customFields !== undefined && customFields !== null) customFields.forEach(function(item) Object.keys(item).forEach(function(key) if bel === partner) partnerValue = item.value; return; ); ); catch (e) console.log(e); if (planData.upComingPlan != null) renewedUser = true; var planDescName = ; currentPlanInfo +=
; /* current plan info ends */ /* next billing html starts */ if (planData.next_billing_at != && planData.next_billing_at != null && typeof planData.next_billing_at != undefined) billingCycleText = Next Billing Date : ; nextActivationDate = planData.next_billing_at; else if (planData.expires_at != && planData.expires_at != null && typeof planData.expires_at != undefined) billingCycleText = Expiry date : ; nextActivationDate = planData.expires_at; else billingCycleText = Expiry date : ; nextActivationDate = planData.current_term_ends_at; var nextBillingMonth = new Date(nextActivationDate).toDateString().split( )[1]; var nextBillingDay = new Date(nextActivationDate).getUTCDate(); var nextBillingYear = new Date(nextActivationDate).getFullYear(); var nextBillingHtml = nextBillingDay ?
+ billingCycleText + nextBillingDay + + nextBillingMonth + + nextBillingYear +
; /* next billing html ends */ /* renew now html starts */ if (showRenewNowFlag(planType, planActivateDate, renewedUser) && partnerValue != comviva) renewText +=
; if (isWithinDiscounted(nextActivationDate)) var maxDiscountPercent = planCode == wsj_bi ? 10 : 25; renewText +=
; /* renew now html ends*/ var wsjHtml =
; if (planData.plan.plan_type.toLowerCase() == bundle) planDescName = getBundlePlanDesc(planData.plan.base_plans); if (signupSource == P) var html =
; document.getElementById(userPlanMSSec).style = display: block;; document.getElementById(userPlanMSSec).innerHTML = html; else var html =
; document.getElementById(userPlanMSSec).style = display: block;; document.getElementById(userPlanMSSec).innerHTML = html; else if (planData.plan.plan_type.toLowerCase().includes(wsj) && wsjEmail != ) html =
+ renewText + currentPlanInfo + nextBillingHtml + wsjHtml +
; document.getElementById(userPlanMSSec).style = display: block;; document.getElementById(userPlanMSSec).innerHTML = html; getWsjStatus(wsjEmail); else html =
+ renewText + currentPlanInfo + nextBillingHtml +
; document.getElementById(userPlanMSSec).style = display: block;; document.getElementById(userPlanMSSec).innerHTML = html; if (partnerValue == comviva) document.getElementById(manageSub).style = display: none;; else if ntains(subsUpdated)) var msgEl = document.createElement(div); msgEl.classList.add(newBlock); msgEl.classList.add(planSec); msgEl.innerHTML =Subscribe Now; document.getElementById(userProfileInfo).after(msgEl); document.getElementById(userProfileInfo).classList.add(subsUpdated); ; xhr.open(GET, /subscription/fetch/userinfo/ + window.getCookie(token)); xhr.send(); function closePopUp(elm) var isSubscribedCookie = getCookie(isSubscribed); if (isSubscribedCookie !== undefined && isSubscribedCookie) setCookieNewsletter(isSubscribed, isSubscribedCookie, -1); if (elm !== undefined && elm && document.getElementById(elm)) document.getElementById(newsltrOvrlay).style.display = none; document.getElementById(elm).style.display = none; function openUserSideProfile() closePopUp(thnkNewsletter); getUserData(); ga(send, event, my_account, Click); document.getElementById(myAccount).style.width = 320 document.getElementById(Userbgoverlay).style.display = block; var trackData = ; trackWebEngageEvents(My Account Viewed, trackData); function closeUserSideProfile() document.getElementById(myAccount).style.width = 0; document.getElementById(Userbgoverlay).style.display = none; function goToManageSubscriptions(storyId, tenureEndDate, currentPlanName,pixelCapieventName) let redirectUrl = let queryParamString = trackRenewClick(storyId, tenureEndDate, currentPlanName); fireCapiService(pixelCapieventName); redirectUrl += queryParamString; redirectUrl += &check_app=true; setTimeout(() =
window.location.href= redirectUrl; , 500) function isWithinDiscounted(tenureEndDate) try const diffDays = dateDiff(tenureEndDate); if ((diffDays
14) return true; else return false; catch (e) console.log(e); return false; function dateDiff(date) const dateCompare = new Date(date); const dateToday = new Date(); const diffTime = dateToday - dateCompare; const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); return diffDays; function getDaysInExpiry(tenureEndDate) try const diffDays = dateDiff(tenureEndDate) - 1; let daysInExpiry = ; if (diffDays
0) daysInExpiry = D+ + diffDays; else daysInExpiry = D + diffDays; return daysInExpiry; catch (e) console.log(e); return ; function getWsjStatus(wsjEmail) var wsjStatusHtml = ; var xhrWsj = new XMLHttpRequest(); xhrWsj.onreadystatechange = function() if (xhrWsj.readyState === 4) var dataWsj = JSON.parse(xhrWsj.responseText); if (dataWsj && dataWsj.data && dataWsj.data.redemption_code_status && dataWsj.data.redemption_code_status != && dataWsj.data.redemption_code_status != null && typeof dataWsj.data.redemption_code_status != undefined) redemptionCodeStatus = dataWsj.data.redemption_code_status; if (redemptionCodeStatus == EXHAUSTED) wsjStatusHtml =
; document.getElementById(activateWsj).innerHTML = wsjStatusHtml; else if (dataWsj.data.redemption_url != null && typeof dataWsj.data.redemption_url != undefined && dataWsj.data.redemption_url != ) wsjStatusHtml =
You have not used your The Wall Street Journal access yet.Activate now
; document.getElementById(activteWsj).innerHTML = wsjStatusHtml; else document.getElementById(activateWsj).style.display = none; console.log(redemption url is not found); ; xhrWsj.open(GET, /subscription/fetch/wsjStatus/ + wsjEmail); xhrWsj.send(); function hideOnPhonePe() var userAgent = erAgent; var objectsToHide = document.getElementsByClassName(hideOnPhonePe); if (userAgent.includes(phonepe-webview) && objectsToHide.length != 0) for (i = 0; i
getBrandName(p)).join(+); function getBrandName(brandCode) if (!publicationsObj) return brandCode; if (!publicationsObj.planName) return brandCode; if (!publicationsObj.planName[brandCode]) return brandCode; return publicationsObj.planName[brandCode]; function fetchPublications() return fetch(/json/publications.json).then((resp) =
resp.json()).then((resp) =
if (resp.success) publicationsObj = resp.data; ).catch((err) =
console.log(failed to fetch publicatons, err)); function getPlanNameByBasePlan(basePlan) if (!basePlan) return; return basePlan.map((plan) =
replaceAll(getBrandName(publicationsObj.planNameEvent[plan])), , _).join(;); function whatsappCtaClick() if (whatsappOpted == true) trackWebEngageEvents(manage_whatsapp_updates_clicked, trackDataWa); Moengage.track_event(manage_whatsapp_updates_clicked, Gender: trackDataWa[Gender], Plan: trackDataWa[Plan], Registered at: trackDataWa[Registered at], isSubscribed: trackDataWa[isSubscribed], Origin: trackDataWa[Origin] ); var whatsappOptInUrl = + &Gender= + trackDataWa[Gender] + &Plan= + trackDataWa[Plan] + &Registered_at= + trackDataWa[Registered at] + &isSubscribed= + trackDataWa[isSubscribed] + &origin= + trackDataWa[Origin]; window.location.href= whatsappOptInUrl; else trackWebEngageEvents(get_alert_on_whatsapp_clicked, trackDataWa); Moengage.track_event(get_alert_on_whatsapp_clicked, Gender: trackDataWa[Gender], Plan: trackDataWa[Plan], Registered at: trackDataWa[Registered at], isSubscribed: trackDataWa[isSubscribed], Origin: trackDataWa[Origin] ); if (typeof isSubscribedUser != undefined && isSubscribedUser != null) if (isSubscribedUser == true) var whatsappOptInUrl = + &Gender= + trackDataWa[Gender] + &Plan= + trackDataWa[Plan] + &Registered_at= + trackDataWa[Registered at] + &isSubscribed= + trackDataWa[isSubscribed] + &origin= + trackDataWa[Origin]; window.location.href= whatsappOptInUrl; else toggleWhatsappNonSubsPopUp(true); function trackRenewClick(storyId, tenureEndDate, currentPlanName) let targetStorySection = ; let targetStorySubSection = ; let targetStoryURL = ; let targetStoryTitle = ; let targetStoryAuthorName = ; let expiryPeriod = ; let trackData = ; try if (typeof storyId != undefined && storyId != null && storyId.trim() != ) const targetBoxDivId = box_ + storyId.trim(); const targetBoxDivEl = document.getElementById(targetBoxDivId); const targetArticleDivId = article_ + storyId; try targetStorySection = targetBoxDivEl.closest([data-vars-section]).getAttribute(data-vars-section); catch (e) if (typeof snowplowSection != undefined) targetStorySection = snowplowSection; console.log(e); try targetStorySubSection = targetBoxDivEl.closest([data-vars-subsection]).getAttribute(data-vars-subsection); catch (e) console.log(e); try targetStoryURL = domainURLEvents + targetBoxDivEl.closest([data-weburl]).getAttribute(data-weburl); catch (e) console.log(e); try if (document.getElementById(headline_ + storyId) !== null) targetStoryTitle = document.getElementById(headline_ + storyId).innerText; catch (e) console.log(e); try const authEl = document.getElementById(targetArticleDivId).getElementsByClassName(author)[0]; if (typeof authEl.innerText != undefined && authEl.innerText != null) targetStoryAuthorName = authEl.innerText; else targetStoryAuthorName = ; catch (e) console.log(e); try expiryPeriod = getDaysInExpiry(tenureEndDate); catch (e) expiryPeriod = ; console.log(e); trackData.domain = LM; trackData[Article Section] = targetStorySection; trackData[Article Subsection] = targetStorySubSection; trackData[Article Id] = storyId; trackData[Article Title] = targetStoryTitle; trackData[Author Name] = targetStoryAuthorName; trackData[Expiry Period] = expiryPeriod; trackData[Plan Name Before Renewal] = currentPlanName; trackData[Manage Plan Page Reason] = my_account; trackData.Platform = Web; trackData[Campaign Reason] = ; var gaData = dimension22: LM, dimension23: trackData[Manage Plan Page Reason], dimension26: trackData[Campaign Reason], dimension48: trackData[Expiry Period], dimension49: trackData[Article Section], dimension50: trackData[Article Subsection], dimension51: trackData[Article Id], dimension3: trackData[Author Name], dimension66: currentPlanName ; gaTrackingEvent1(subscription, renew_now_clicked, trackData[Article Title], gaData); Moengage.track_event(renew_now_clicked, trackData); catch (e) console.log(e); return ?domain= + trackData[domain] + &article_section= + trackData[Article Section] + &article_subsection= + trackData[Article Subsection] + &article_id= + trackData[Article Id] + &article_title= + trackData[Article Title] + &author_name= + trackData[Author Name] + &expiry_period= + trackData[Expiry Period] + &plan_name_before_renewal= + trackData[Plan Name Before Renewal] + &manage_plan_page_reason= + trackData[Manage Plan Page Reason] + &platform= + trackData[Platform];
`; document.getElementById(id).innerHTML = btmHtml; if(pageName != undefined && pageName === watchlist) document.getElementById(bottom-nav-watchlist).classList.add(active); else if(pageName != undefined && pageName === marketDashboard) document.getElementById(bottom-nav-market).classList.add(active); else if(pageType != undefined && pageType === rfu) document.getElementById(bottom-nav-rfu).classList.add(active); else if(pageType != undefined && pageType === premium) document.getElementById(bottom-nav-premium).classList.add(active); try renderBottomMenuItems(btmMenuDiv); catch(err) if(readCookie(token) && readCookie(_ht_clientid)) writeUpdateName(); checkStatus(); fetchPublications();getBookMarkAll(); try getUserLoginData(); catch(e) callLotame() loadHeader() else callLotame(); var height = document.getElementById(lhswidgets).offsetHeight; var inlineCss = margin-top: + height + ; document.getElementById(lastBlock).setAttribute(style, inlineCss) setTimeout(function() moE(); we(); lmGTMScript(); hideHamburger(); callIpitoGetIP(); sendCountryLocationToCPD(); hideOnPhonePe(); loadHeader(); if (pageName != undefined && pageName == story) renderChartOnStoryDirectLoad() callTab(); getParameterByName(); topNav(); getSwiper(); getSwiperImage(); checkNewsletter(); checkNewsletterStory(); const observerTwitt = itt_lozad, load: el =
const bq = document.createElement(blockquote); bq.className = twitter-tweet; const p = document.createElement(p); p.lang = ja; p.dir = ltr; bq.appendChild(p); const twittersrc= el.dataset.twitterSrc; const a = document.createElement(a); a.href= twitterSrc; bq.appendChild(a); const script = document.createElement(script); script.src= script.charset = utf-8; script.async = true; el.insertAdjacentElement(beforeEnd, bq); el.insertAdjacentElement(beforeEnd, script); ); observerTwitt.observe(); if(isDeviceEnabled(large)) var thisStoryId = 167; if (typeof adFree != undefined && adFree) try var rhsNotAdFreeUserContentDivArr = document.getElementsByClassName(rhsWidgetNotAdFree); if(rhsNotAdFreeUserContentDivArr.length
0)for(var rhsNotAdFreeContentIndex = 0; rhsNotAdFreeContentIndex
0)for(var rhsNotAdFreeContentIndex = 0; rhsNotAdFreeContentIndex
setTimeout(function() loadScriptPltU( function() trypianoScriptLoaded=true catch(e)console.log(e) try pianoPaywallTimestamp[piano_sdk_loaded] = getTs(); catch(e)console.log(e) ); , 1000 ));
*/ function getQueryParams() const queryParams = ; location.search .substring(1) .split(&) .forEach(pair =
const parts = pair.split(=); queryParams[parts[0]] = parts[1]; ); return queryParams; function setCookieNewsletter(cname, cvalue, exdays) var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = expires=+d.toUTCString(); document.cookie = cname + = + cvalue + ; + expires + ;path=/; function whatsAppBoxShow()var waAdFree = adFree; if(!readCookie(waOptInBoxShow) && waAdFree)if(!document.querySelector(whatsappBox)) return; if(!isShow) return document.querySelector(whatsappBox).style=display:none; tryvar xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() if (xhr.readyState === 4) var data = JSON.parse(xhr.responseText); if (data && !data.tokenExpired) console.log(clientData,data); var userData = data; var whtsContentId = whatsappTemplateConsent; var userData = data; var name = userData.name; var email = userData.email; var cellNumber = userData.cellNumber; if(!(userData.plan userData.plan.subscriptions userData.plan.subscriptions.length
return d.status != cancelled d.status != cancelled_from_dunning); var whatsAppConsent = userData.whatsAppConsent ; if(typeof WHATSAPP_POPUP_DATA != undefined && cellNumber)if(cellNumber.length == 12 )WHATSAPP_POPUP_DATA.mobile = cellNumber.substr(2); WHATSAPP_POPUP_DATA.cellNumber=cellNumber.substr(2); elseWHATSAPP_POPUP_DATA.mobile = cellNumber; WHATSAPP_POPUP_DATA.cellNumber=cellNumber; if(!whatsAppConsent.LM && isPlanActive)insertStyleSheet(waGoogleFont, , stylesheet); insertStyleSheet(mobileFlagCss, screen, stylesheet); loadScriptPltU( function()loadScriptPltU( function()loadScriptPltU( function()loadScriptPltU( function()loadScriptPltU(/js/whatsapp-opt.js?v1.5, function()setCountryCodes(); showWhatsappcontent(whtsContentId); setCookie(waOptInBoxShow, true, 1); ); ); ); ); ); ; xhr.open(GET, /subscription/fetch/userinfo/ + token); xhr.send(); catch(e)console.error(failed to load user data,e) function whatsAppBoxShowCamp() if(!document.querySelector(whatsappBox)) return; if(!isShow) return document.querySelector(whatsappBox).style=display:none; var token = getCookie(token);if (token) tryvar xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() if (xhr.readyState === 4) var data = JSON.parse(xhr.responseText); if (data && !data.tokenExpired) console.log(clientData,data); var userData = data; var whtsContentId = whatsappTemplateConsent; var userData = data; var name = userData.name; var email = userData.email; var cellNumber = userData.cellNumber; var whatsAppConsent = userData.whatsAppConsent ; if(typeof WHATSAPP_POPUP_DATA != undefined && cellNumber)if(cellNumber.length == 12 )WHATSAPP_POPUP_DATA.mobile = cellNumber.substr(2); WHATSAPP_POPUP_DATA.cellNumber=cellNumber.substr(2); elseWHATSAPP_POPUP_DATA.mobile = cellNumber; WHATSAPP_POPUP_DATA.cellNumber=cellNumber; if(!whatsAppConsent.LM)insertStyleSheet(waGoogleFont, , stylesheet); insertStyleSheet(mobileFlagCss, screen, stylesheet); loadScriptPltU( function()loadScriptPltU( function()loadScriptPltU( function()loadScriptPltU( function()loadScriptPltU(/js/whatsapp-opt.js?v1.5, function()setCountryCodes(); showWhatsappcontent(whtsContentId); setCookie(waOptInBoxShow, true, 1); ); ); ); ); ); ; xhr.open(GET, /subscription/fetch/userinfo/ + token); xhr.send(); catch(e)console.error(failed to load user data,e) function insertStyleSheet(cssId, src, media=all, rel=stylesheet) if (!document.getElementById(cssId)) var head = document.getElementsByTagName(head)[0]; var link = document.createElement(link); link.id = cssId; link.rel = rel; link.href= src; if(media!= dia = media; head.appendChild(link); function initGoogleOneTapLogin() if (!getCookie(g_state)) loadScriptPltU( function() var gaData = dimension22: LM, dimension41: Google One Tap, dimension42: , nonInteraction:1 ; gaTrackingEventGOT(SSO Page Viewed, Google One Tap, gaData); setCookie(g_state, , -1); googleOneTap(); ); function gaTrackingEventGOT(eventName, planName, eventData) try ga(send, event, eventName, planName, eventData) catch (e) function fireGATrackingEvent() var videoElem = document.querySelectorAll(.lmWidgetTracking); videoElem.forEach(function(item, i) if(isElementXPercentInViewport(item, 30)) if(item.classList.contains(eventFired)) /*console.log(item, i, Dont fire Event);*/ else let widget = document.getElementsByClassName(lmWidgetTracking)[i]; let widgetType = widget.getAttribute(data-vars-widget-type); let widgetName = widget.getAttribute(data-vars-widget-title); let promotionName = widget.getAttribute(data-vars-widget-name); if(widgetName === Mint SnapView) promotionName = Mint SnapView let currentUrl = window.location.href; let placementNumber = widget.getAttribute(data-vars-orderid); let widgetItem = widget.querySelectorAll(.vidSec .swiper-wrapper .swiper-slide); let promotions = []; if(widgetType && widgetType == storyWidget) let isDisplayBlock = document.getElementsByClassName(lmWidgetTracking)[i].parentElement.parentElement.parentElement.parentElement.getAttribute(style); if(!isDisplayBlock) isDisplayBlock = document.getElementsByClassName(lmWidgetTracking)[i].parentElement.parentElement.parentElement.parentElement.parentElement.getAttribute(style); if(!isDisplayBlock) isDisplayBlock = widget.getAttribute(style); if(isDisplayBlock && isDisplayBlock == display: block;) let itemIndex = 0; for(const item of widgetItem) let promoItems = ; let name = , creative = ; if(widgetType && widgetType == storyWidget) creative = item.querySelectorAll(.vidHolder)[0].getAttribute(data-url); name = item.querySelectorAll(.vidHolder h4 a)[0].text; pageName = story else creative = item.querySelectorAll(.vidHolder a)[0].getAttribute(href); name = item.querySelectorAll(.vidHolder h2 a)[0].text; promoItems[id] = item.getAttribute(data-vars-storyid); promoItems[name] = promotionName.replace((/ \r\n\n\r/gm), ); promoItems[creative] = creative; promoItems[position] = item.getAttribute(data-vars-orderid); promotions.push(promoItems); itemIndex++; if(itemIndex
= 3) break; dataLayer.push(event: promoView, widgetName: promotionName, pageType: pageName, placementNumber: placementNumber, pageUrl: currentUrl, ecommerce: promoView: promotions: promotions ); item.classList.add(eventFired); else if(widgetType && widgetType == listingWidget && promotionName == RFU Widget) const stories = item.getElementsByClassName(impression-candidate); count = 0; for(const item of stories) count++; if(isOnScreenTrackingEvent(item)) if(!item.classList.contains(eventFired)) let promoItems = ; promoItems[id] = item.getAttribute(data-vars-storyid); promoItems[name] = promotionName.replace((/ \r\n\n\r/gm), ); promoItems[creative] = item.getAttribute(data-url);; promoItems[position] = count; promotions.push(promoItems); item.classList.add(eventFired); else item.classList.remove(eventFired); if(promotions.length
0) dataLayer.push(event: promoView, widgetName: promotionName, pageType: pageName, placementNumber: placementNumber, pageUrl: currentUrl, ecommerce: promoView: promotions: promotions ); else if(widgetType && widgetType === RHS Widget) if(window.getComputedStyle(item, null).display !== none) const stories = item.getElementsByClassName(impression-candidate); count = 0; for(const item of stories) count++; if(isOnScreenTrackingEvent(item)) if(!item.classList.contains(eventFired)) let promoItems = ; promoItems[id] = item.getAttribute(data-vars-storyid); promoItems[name] = promotionName.replace((/ \r\n\n\r/gm), ); promoItems[creative] = item.getAttribute(data-url);; promoItems[position] = count; promotions.push(promoItems); item.classList.add(eventFired); else item.classList.remove(eventFired); if(promotions.length
0) dataLayer.push(event: promoView, widgetName: promotionName, pageType: pageName, placementNumber: placementNumber, pageUrl: currentUrl, ecommerce: promoView: promotions: promotions ); else dataLayer.push(event: promoView, widgetName: promotionName, pageType: pageName, placementNumber: placementNumber, pageUrl: currentUrl, ); else if(widgetType && widgetType === electionWidget) let promoItems = ; promoItems[id] = item.getAttribute(data-vars-storyid); promoItems[name] = widgetName; promoItems[creative] = ; promoItems[position] = placementNumber; promotions.push(promoItems); if(promotions.length
0) dataLayer.push(event: promoView, widgetName: promotionName, pageType: pageName, placementNumber: placementNumber, pageUrl: currentUrl, ecommerce: promoView: promotions: promotions ); item.classList.add(eventFired); else if(widgetType && widgetType === simpleWidget) let promoItems = ; promoItems[id] = item.getAttribute(data-vars-storyid); promoItems[name] = widgetName; promoItems[creative] = item.getAttribute(data-url); promoItems[position] = placementNumber (i + 1); promotions.push(promoItems); if(promotions.length
0) dataLayer.push(event: promoView, widgetName: promotionName, pageType: pageName, placementNumber: placementNumber (i + 1), pageUrl: currentUrl, ecommerce: promoView: promotions: promotions ); item.classList.add(eventFired); else let itemIndex = 0; for(const item of widgetItem) let promoItems = ; let name = , creative = ; if(widgetType && widgetType == storyWidget) creative = item.querySelectorAll(.vidHolder)[0].getAttribute(data-url); name = item.querySelectorAll(.vidHolder h4 a)[0].text; else creative = item.querySelectorAll(.vidHolder a)[0].getAttribute(href); name = item.querySelectorAll(.vidHolder h2 a)[0].text; promoItems[id] = item.getAttribute(data-vars-storyid); promoItems[name] = promotionName.replace((/ \r\n\n\r/gm.