1(function () { 2 "use strict"; 3 var CONFIG = { 4 ENABLE_LOGS: false, 5 MARKER_CLASS: "global-hotfix-manager-initialized", 6 TARGET_GRANDPARENT_SELECTOR: "#pencil-banner", 7 TARGET_LINK_SELECTOR: "a.cta-link", 8 FIX_ID_PENCIL_BANNER: "PENCIL_BANNER_CTA_FIX", 9 // FIX_ID_CND_4551: "CND-4551", 10 }; 11 var marketPathCache = null; 12 function log(fixId, message, data) { 13 if (CONFIG.ENABLE_LOGS) { 14 var time = new Date().toLocaleTimeString("en-US", { hour12: false }); 15 console.log("[" + fixId + "] [" + time + "]: " + message); 16 if (data) console.log(data); 17 } 18 } 19 function getMarketLanguagePath() { 20 if (marketPathCache) { 21 return marketPathCache; 22 } 23 var path = window.location.pathname; 24 var pathPrefix = "/"; 25 var pathMatch = path.match(/^\/([a-z]{3}|\w{2,3})\/([a-z]{2})\/?/); 26 if (pathMatch) { 27 pathPrefix = pathMatch[0]; 28 if (!pathPrefix.endsWith("/")) { 29 pathPrefix += "/"; 30 } 31 } else { 32 if (path === "/" || path === "") { 33 try { 34 var globalPlatformData = sessionStorage.getItem("GlobalPlatform"); 35 if (globalPlatformData) { 36 var data = JSON.parse(globalPlatformData); 37 if (data && data.marketPath) { 38 pathPrefix = data.marketPath; 39 pathPrefix = pathPrefix.startsWith("/") 40 ? pathPrefix 41 : "/" + pathPrefix; 42 } 43 } 44 } catch (e) {} 45 } 46 } 47 marketPathCache = pathPrefix; 48 log("PATH_HELPER", "Market path determined to be: " + pathPrefix); 49 return pathPrefix; 50 } 51 // function fix_CND_4551() { 52 // var FIX_ID = CONFIG.FIX_ID_CND_4551; 53 // var runFixLogic = function () { 54 // var templates = ["homepage-template", "initial-page-template"]; 55 // var isTargetTemplate = templates.some(function (cls) { 56 // return document.body.classList.contains(cls); 57 // }); 58 // if (!isTargetTemplate) { 59 // return; 60 // } 61 // var heroBase = document.querySelector( 62 // ".superpromohero.basicHero > div.basicHero__base" 63 // ); 64 // if (!heroBase) { 65 // return; 66 // } 67 // var hasPromoActive = heroBase.classList.contains( 68 // "promoHero__base--active" 69 // ); 70 // if (!hasPromoActive) { 71 // return; 72 // } 73 // var lockupImages = heroBase.querySelectorAll(".promoHero__lockupImage"); 74 // var hasVisibleLockup = Array.from(lockupImages).some(function (img) { 75 // return img.offsetParent !== null; 76 // }); 77 // if (!hasVisibleLockup) { 78 // var firstSmallPerk = heroBase.querySelector( 79 // "h3.basicHero__textLine.basicHero__textLine--small" 80 // ); 81 // if (firstSmallPerk) { 82 // firstSmallPerk.classList.remove("basicHero__textLine--small"); 83 // firstSmallPerk.classList.add("basicHero__textLine--large"); 84 // log(FIX_ID, "Applied fix: Enlarged first perk text."); 85 // } 86 // } 87 // }; 88 // setTimeout(runFixLogic, 500); 89 // } 90 function fix_PENCIL_BANNER_CTA() { 91 var FIX_ID = CONFIG.FIX_ID_PENCIL_BANNER; 92 var TARGET_GRANDPARENT = CONFIG.TARGET_GRANDPARENT_SELECTOR; 93 var TARGET_LINK = CONFIG.TARGET_LINK_SELECTOR; 94 var observerInstance = null; 95 function applyFix(ctaLink, observer, isOverwriteReversal) { 96 var originalHref = ctaLink.getAttribute("href"); 97 var marketPathPrefix = getMarketLanguagePath(); 98 if ( 99 !originalHref || 100 originalHref.startsWith("http") || 101 originalHref.startsWith(marketPathPrefix) || 102 originalHref === "#" 103 ) { 104 if (observer && !isOverwriteReversal) { 105 observer.disconnect(); 106 } 107 return; 108 } 109 var cleanHref = originalHref.startsWith("/") 110 ? originalHref.substring(1) 111 : originalHref; 112 var newHref = marketPathPrefix + cleanHref; 113 ctaLink.setAttribute("href", newHref); 114 log( 115 FIX_ID, 116 "SUCCESS: Updated Href (Attempt: " + 117 (isOverwriteReversal ? "Overwrite Reversal" : "Initial") + 118 ")", 119 { original: originalHref, new: newHref } 120 );
121 if (observer && !isOverwriteReversal) { 122 observer.disconnect(); 123 } 124 } 125 function startOverwriteReversalObserver(ctaLink) { 126 log(FIX_ID, "INITIATING OVERWRITE REVERSAL OBSERVER on CTA link."); 127 var reversalObserver = new MutationObserver(function () { 128 var currentHref = ctaLink.getAttribute("href"); 129 var marketPathPrefix = getMarketLanguagePath(); 130 if ( 131 currentHref && 132 currentHref !== "#" && 133 !currentHref.startsWith(marketPathPrefix) 134 ) { 135 log(FIX_ID, "OVERWRITE DETECTED! Reverting fix.", currentHref); 136 reversalObserver.disconnect(); 137 applyFix(ctaLink, null, true); 138 } 139 }); 140 var config = { attributes: true, attributeFilter: ["href"] }; 141 reversalObserver.observe(ctaLink, config); 142 applyFix(ctaLink, null, false); 143 } 144 function startBodyObserver() { 145 log( 146 FIX_ID, 147 "STARTING GLOBAL OBSERVER: Monitoring document.body for final Pencil Banner state." 148 ); 149 var observer = new MutationObserver(function () { 150 var pencilBanner = document.querySelector(TARGET_GRANDPARENT); 151 if (pencilBanner && pencilBanner.classList.contains("is-visible")) { 152 var ctaLink = pencilBanner.querySelector(TARGET_LINK); 153 if (ctaLink) { 154 var currentHref = ctaLink.getAttribute("href"); 155 if ( 156 currentHref && 157 currentHref !== "#" && 158 !currentHref.startsWith(getMarketLanguagePath()) 159 ) { 160 log( 161 FIX_ID, 162 "Pencil Banner FINALIZED. Initiating Overwrite Reversal sequence." 163 ); 164 observer.disconnect(); 165 startOverwriteReversalObserver(ctaLink); 166 } 167 } 168 } 169 }); 170 var config = { 171 childList: true, 172 subtree: true, 173 attributes: true, 174 attributeFilter: ["class", "href"], 175 }; 176 observer.observe(document.body, config); 177 observerInstance = observer; 178 setTimeout(function () { 179 var finalLink = document.querySelector(TARGET_LINK); 180 if ( 181 finalLink && 182 finalLink.getAttribute("href") && 183 finalLink.getAttribute("href") !== "#" && 184 !finalLink.getAttribute("href").startsWith(getMarketLanguagePath()) 185 ) { 186 log( 187 FIX_ID, 188 "3s Fallback Check Triggered. Initiating Overwrite Reversal sequence." 189 ); 190 observerInstance.disconnect(); 191 startOverwriteReversalObserver(finalLink); 192 } else { 193 log(FIX_ID, "3s Fallback Check passed. Continuing observation."); 194 } 195 }, 3e3); 196 } 197 startBodyObserver(); 198 } 199 function runAllFixes() { 200 if (document.body.classList.contains(CONFIG.MARKER_CLASS)) { 201 log("MANAGER", "Manager already executed. Skipping."); 202 return; 203 } 204 document.body.classList.add(CONFIG.MARKER_CLASS); 205 log("MANAGER", "Starting execution of all registered fixes."); 206 207 208 // var fixRegistry = [fix_PENCIL_BANNER_CTA]; 209 var fixRegistry = []; 210 211 212 for (var i = 0; i < fixRegistry.length; i++) { 213 fixRegistry[i](); 214 } 215 log("MANAGER", "All registered fixes have been executed."); 216 } 217 if ( 218 document.readyState === "interactive" || 219 document.readyState === "complete" 220 ) { 221 runAllFixes(); 222 } else { 223 document.addEventListener("DOMContentLoaded", runAllFixes); 224 } 225})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.