1class BuyNowHandler{constructor(){this.productsData=null,this.isInitialized=!1,this.init()}init(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>this.initialize()):this.initialize()}async initialize(){!0!==window.MIK_DISABLE_MINICART&&(await this.loadProductsData(),this.enhanceBuyNowButtons(),this.enhancePriceComparisonElements(),this.setupEventListeners(),this.setupMutationObserver(),setTimeout(()=>{this.enhanceMenuButtons(),"function"==typeof window.styleUnsupportedRegionButtons&&window.styleUnsupportedRegionButtons()},100),this.isInitialized=!0)}async getUserToken(){if(window.productService&&"function"==typeof window.productService.getUserToken)return await window.productService.getUserToken();if(window.AuthService&&"function"==typeof window.AuthService.getToken){const t=window.AuthService.getToken();if(t)return t}if(window.tokenManager&&window.tokenManager.accessToken)return window.tokenManager.accessToken;try{const t=localStorage.getItem("access_token");if(t)return t}catch(t){}return null}async loadProductsData(){try{if("undefined"!=typeof ShopProducts){const t=ShopProducts.getCachedData();if(t&&t.singleProducts){void 0!==t.unsupportedRegion&&(window.unsupportedRegion=!0===t.unsupportedRegion,"function"==typeof window.styleUnsupportedRegionButtons&&setTimeout(()=>window.styleUnsupportedRegionButtons(),10),setTimeout(()=>this.enhanceBuyNowButtons(),20)),this.productsData=this.flattenProductsData(t);return this.updateProductsForBundleLogic(t)||this.syncCartPrices(),void this.enhanceBuyNowButtons()}}if(void 0!==window.productService){const t=await window.productService.initializeProducts({});if(t&&t.singleProducts){if(t.regionalPriceGroupInfo){window.currencyCode=t.regionalPriceGroupInfo.currencyCode||window.currencyCode||"USD",window.localeString=t.regionalPriceGroupInfo.localeString||window.localeString||"en-US",window.countryCode=t.regionalPriceGroupInfo.countryCode||window.countryCode||"US";try{document.dispatchEvent(new CustomEvent("mik:regional-pricing-ready",{detail:{countryCode:window.countryCode}}))}catch(t){}}t.currencySymbol&&(window.currencySymbol=t.currencySymbol),void 0!==t.unsupportedRegion&&(window.unsupportedRegion=!0===t.unsupportedRegion,"function"==typeof window.styleUnsupportedRegionButtons&&setTimeout(()=>window.styleUnsupportedRegionButtons(),10),setTimeout(()=>this.enhanceBuyNowButtons(),20));const e={singleProducts:t.singleProducts||[],bundles:t.bundles||[],recommendedProducts:t.recommendedProducts||[],dealProducts:t.dealProducts||[],unsupportedRegion:!0===t.unsupportedRegion};window.cachedProductsData=e,"undefined"!=typeof ShopProducts&&ShopProducts.setCachedData(e),this.productsData=this.flattenProductsData(e);return this.updateProductsForBundleLogic(e)||this.syncCartPrices(),void this.enhanceBuyNowButtons()}}const t=await this.fetchProductsData();if(t&&t.success){void 0!==t.data.unsupportedRegion&&(window.unsupportedRegion=!0===t.data.unsupportedRegion,"function"==typeof window.styleUnsupportedRegionButtons&&setTimeout(()=>window.styleUnsupportedRegionButtons(),10),setTimeout(()=>this.enhanceBuyNowButtons(),20)),this.productsData=this.flattenProductsData(t.data);this.updateProductsForBundleLogic(t.data)||this.syncCartPrices(),this.enhanceBuyNowButtons()}}catch(t){console.error("BuyNowHandler: Failed to load products data:",t)}}async fetchProductsData(){if(void 0!==window.productService)try{return{success:!0,data:await window.productService.initializeProducts({})}}catch(t){console.warn("BuyNowHandler: ProductService failed, falling back to WordPress AJAX:",t)}}flattenProductsData(t){const e={};return["singleProducts","bundles","recommendedProducts","dealProducts"].forEach(o=>{t[o]&&Array.isArray(t[o])&&t[o].forEach(t=>{t.id&&(e[t.id]=t)})}),e}normalizeShopLink(t){if("A"===t.tagName&&t.href&&(t.href.includes("shop.mixedinkey.com")||t.href.includes("buy.mixedinkey.com"))){const e=new URL(t.href).searchParams,o=t.getAttribute("data-mik-product-id");let n=e.get("productId");!o&&n&&(1009==parseInt(n)&&(n="1037"),t.setAttribute("data-mik-product-id",n));
1const i=e.get("c")||e.get("cmpgn")||e.get("campaign");t.href=this.buildShopUrl(i,e)}}buildShopUrl(t=null,e=null){const o=new URL(`${window.location.origin}/shop`);t&&o.searchParams.set("c",t);const n=this.getVipCode(e);return n&&o.searchParams.set("vip",n),o.toString()}getVipCode(t=null){return"function"!=typeof window.mikGetVipCodeFromUrl?null:(t?window.mikGetVipCodeFromUrl(t):null)||window.mikGetVipCodeFromUrl()}updateProductsForBundleLogic(t){return"function"==typeof window.updateProducts&&(window.updateProducts(t.singleProducts||[],t.bundles||[],t.recommendedProducts||[]),!0)}enhanceBuyNowButtons(){const t=document.querySelectorAll("[data-mik-product-id]"),e=document.querySelectorAll("a[data-mik-product-id], button[data-mik-product-id]"),o=document.querySelectorAll('a[href*="shop.mixedinkey.com"], a[href*="buy.mixedinkey.com"], a.buy-now, a.cart, button.buy-now, .buy-now-btn'),n=document.querySelectorAll("[data-buy-now-enhanced]");t.forEach(t=>this.enhanceButton(t)),e.forEach(t=>this.enhanceButton(t)),o.forEach(t=>this.enhanceLegacyButton(t)),n.forEach(t=>{t.hasAttribute("data-mik-product-id")?this.enhanceButton(t,!0):this.enhanceLegacyButton(t)})}enhanceButton(t,e=!1){const o=t.hasAttribute("data-buy-now-enhanced")&&!e;if(!0===window.unsupportedRegion)return t.classList.add("buy-now-disabled","unsupported-region-disabled"),void("BUTTON"===t.tagName?t.disabled=!0:"A"===t.tagName&&(t.hasAttribute("data-original-href")||t.setAttribute("data-original-href",t.href||""),t.removeAttribute("href")));if(t.classList.remove("buy-now-disabled","unsupported-region-disabled"),"BUTTON"===t.tagName)t.disabled=!1;else if("A"===t.tagName){const e=t.getAttribute("data-original-href");e&&(t.href=e)}this.normalizeShopLink(t);const n=t.getAttribute("data-mik-product-id");n?this.enhanceButtonWithProductData(t,n):this.inferProductFromContext(t),o||t.setAttribute("data-buy-now-enhanced","true")}enhanceLegacyButton(t){if(this.normalizeShopLink(t),t.hasAttribute("data-buy-now-enhanced")||t.hasAttribute("data-mik-product-id"))return;!0===window.MIK_DISABLE_MINICART||t.hasAttribute("data-disable-minicart")||t.classList.contains("disable-minicart")||t.setAttribute("data-buy-now-enhanced","legacy")}enhanceButtonWithProductData(t,e){if(!this.productsData||!this.productsData[e])return void console.warn(`BuyNowHandler: Product ${e} not found in products data`);if(!0===window.unsupportedRegion)return;const o=this.productsData[e];if(window.MIK_SETTINGS?.showPriceInButtons){const e=o.finalPrice||o.price||0;if(e>0){let n="";if(void 0!==window.FormatUtils&&"number"==typeof e){const t=window.currencyCode||o.currencyCode||o.currency||"USD",i=window.localeString||"en-US";if(n=window.FormatUtils.formatAmount(e,t,i),!n){const o=window.currencySymbol||"$";n=window.FormatUtils.formatCurrencyAmount(e,o,t,i)}}else n=String(e);let i=t.textContent.trim();t.hasAttribute("data-original-text")||t.setAttribute("data-original-text",i);const r=t.getAttribute("data-original-text");i.includes(n)||(t.textContent=`${r} ${n}`,t.setAttribute("data-price-injected","true"))}}t.classList.add("buy-now-enhanced")}enhancePriceComparisonElements(){const t=document.querySelectorAll("[data-mik-price-comparison]");if(!t.length||!this.productsData)return;const e=window.MIK_SETTINGS?.priceComparisonLabels||{originalLabel:"Originally:",nowLabel:"Now:",separator:" | "};t.forEach(t=>{const o=t.getAttribute("data-mik-price-comparison");if(!o||!this.productsData[o])return;const n=this.productsData[o],i=n.price||0,r=n.finalPrice||n.price||0,a=n.displayPrice;let d=i;if(a&&a>r?d=a:i>r&&(d=i),d<=r||r<=0)return;let s="",u="";if(void 0!==window.FormatUtils){const t=window.currencyCode||n.currencyCode||n.currency||"USD",e=window.localeString||"en-US";if(s=window.FormatUtils.formatAmount(d,t,e),u=window.FormatUtils.formatAmount(r,t,e),!s){const o=window.currencySymbol||"$";s=window.FormatUtils.formatCurrencyAmount(d,o,t,e)}if(!u){const o=window.currencySymbol||"$";u=window.FormatUtils.formatCurrencyAmount(r,o,t,e)}}else s=String(d),u=String(r);t.innerHTML=`<span class="mik-price-label">${e.originalLabel}</span> <span class="mik-price-original">${s}</span><span class="mik-price-separator">${e.separator}</span><span class="mik-price-label">${e.nowLabel}</span> <span class="mik-price-now">${u}</span>`})}inferProductFromContext(t){const e=t.closest("[data-mik-product-id]")||t.closest(".product-card")||t.closest(".product-item");if(e){const o=e.getAttribute("data-mik-product-id");o&&(t.setAttribute("data-mik-product-id",o),this.enhanceButtonWithProductData(t,o))}}setupEventListeners(){document.addEventListener("click",t=>{const e=t.target.closest('[data-mik-product-id], [data-buy-now-enhanced="legacy"]');if(e){if(!0===window.unsupportedRegion)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;if(!0===window.MIK_DISABLE_MINICART||e.hasAttribute("data-disable-minicart")||e.classList.contains("disable-minicart"))return;const o=e.hasAttribute("data-shop-now-enhanced"),n=!1===window.MIK_DISABLE_MINICART;if(o&&!n)return;if("legacy"===e.getAttribute("data-buy-now-enhanced"))return t.preventDefault(),void this.handleBuyNowClick(e);t.preventDefault(),this.handleBuyNowClick(e)}},!0)}isBuyNowButton(t){return t.hasAttribute("data-mik-product-id")}handleBuyNowClick(t){if("legacy"===t.getAttribute("data-buy-now-enhanced"))return void this.handleLegacyBuyNowClick(t);const e=this.extractProductData(t);
1if(!e||!e?.id||parseFloat(e?.finalPrice)<=0)return console.error("BuyNowHandler: No product ID found for button",t),void(window.location.href=this.buildShopUrl());!0!==window.unsupportedRegion&&("function"==typeof window.isCoursePurchasedProduct&&window.isCoursePurchasedProduct(e)||(this.addToCart(e),this.showAddToCartFeedback(t)))}handleLegacyBuyNowClick(t){if(!0===window.unsupportedRegion)return;if("A"===t.tagName&&t.href)return void(window.location.href=t.href);const e=t.getAttribute("data-shop-url")||"https://shop.mixedinkey.com/";window.location.href=e}extractProductData(t){let e=t.getAttribute("data-mik-product-id");if(!e&&"A"===t.tagName&&t.href)try{const o=new URL(t.href);if("https://shop.mixedinkey.com"===o.origin||"https://buy.mixedinkey.com"===o.origin){let t=o.searchParams.get("productId");t&&(1009==parseInt(t)&&(t="1037"),e=t)}}catch(t){console.warn("Failed to parse URL:",t)}if(e&&this.productsData&&this.productsData[e]){const t=this.productsData[e];if(!t||!t.id||!t.name||parseFloat(t.finalPrice||t.price)<=0)return null;const o=t.price||0,n=t.finalPrice||t.price||0,i=t.displayPrice;let r=o;return i&&i>n?r=i:o>n&&(r=o),{id:e,name:t.name||"Unknown Product",price:r,finalPrice:n,originalPrice:r,image:t.imageUrl||t.image||"",description:t.shortDe
1scription||t.description||"",quantity:1,platforms:t.platforms||[],isMacAllowed:t.isMacAllowed||!1,isWindowsAllowed:t.isWindowsAllowed||!1,isCourse:!0===t.isCourse||"true"===t.isCourse||1===t.isCourse,courseUrl:t.courseUrl||""}}const o=t.getAttribute("data-product-name"),n=t.getAttribute("data-product-price"),i=t.getAttribute("data-product-final-price"),r=t.getAttribute("data-product-image"),a=t.getAttribute("data-product-description");return!e||!o||parseFloat(i)<=0?null:{id:e,name:o,price:parseFloat(n),finalPrice:parseFloat(i),image:r,description:a,quantity:1,platforms:product.platforms||[],isMacAllowed:product.isMacAllowed||!1,isWindowsAllowed:product.isWindowsAllowed||!1}}addToCart(t){"function"==typeof window.addItemToCart?(window.addItemToCart(t),"function"==typeof window.openCart&&window.openCart()):this.addToCartFallback(t)}addToCartFallback(t){try{let e=JSON.parse(localStorage.getItem("mikShoppingCart")||"[]");const o=e.findIndex(e=>e.id===t.id);o>-1?e[o]={...t,quantity:1}:e.push(t),localStorage.setItem("mikShoppingCart",JSON.stringify(e)),this.updateCartCount()}catch(t){console.error("BuyNowHandler: Failed to add to cart",t)}}syncCartPrices(){try{if("function"==typeof window.syncCartPrices)return void window.syncCartPrices()}catch(t){console.error("Failed to sync cart prices",t)}}updateCartCount(){try{const t=JSON.parse(localStorage.getItem("mikShoppingCart")||"[]").reduce((t,e)=>t+e.quantity,0);document.querySelectorAll(".cart-count, .cart-item-count, #cart-count, [data-cart-count]").forEach(e=>{e.textContent=t,e.style.display=t>0?"inline":"none"}),"function"==typeof window.updateHeaderCartCount&&window.updateHeaderCartCount()}catch(t){console.error("BuyNowHandler: Failed to update cart count",t)}}showAddToCartFeedback(t){const e=t.textContent;t.textContent="Added to Cart!",t.classList.add("added-to-cart"),setTimeout(()=>{t.textContent=e,t.classList.remove("added-to-cart")},2e3),"function"==typeof window.openMiniCart&&setTimeout(()=>window.openMiniCart(),500)}setupMutationObserver(){new MutationObserver(t=>{t.forEach(t=>{t.addedNodes.forEach(t=>{if(1===t.nodeType){this.isBuyNowButton(t)&&this.enhanceButton(t);const e=t.querySelectorAll?.("[data-mik-product-id]"),o=t.querySelectorAll?.("a[data-mik-product-id], button[data-mik-product-id]");e?.forEach(t=>this.enhanceButton(t)),o?.forEach(t=>this.enhanceButton(t));const n=t.querySelectorAll?.("[data-mik-price-comparison]");n?.length&&this.productsData&&this.enhancePriceComparisonElements()}})})}).observe(document.body,{childList:!0,subtree:!0})}enhanceNewButtons(){this.enhanceBuyNowButtons()}enhanceMenuButtons(){document.querySelectorAll("nav a, .menu a, .nav-menu a").forEach(t=>{this.isBuyNowButton(t)&&(t.hasAttribute("data-buy-now-enhanced"),this.enhanceLegacyButton(t))})}getProductsData(){return this.productsData}}let buyNowHandler;"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{buyNowHandler=new BuyNowHandler}):buyNowHandler=new BuyNowHandler,window.BuyNowHandler=BuyNowHandler,window.buyNowHandler=buyNowHandler,window.enhanceMenuButtons=function(){buyNowHandler&&buyNowHandler.enhanceMenuButtons()},window.styleUnsupportedRegionButtons=function(){if(!0===window.unsupportedRegion){document.querySelectorAll("[data-mik-product-id]").forEach(t=>{t.classList.add("buy-now-disabled","unsupported-region-disabled"),"BUTTON"===t.tagName?t.disabled=!0:"A"===t.tagName&&(t.hasAttribute("data-original-href")||t.setAttribute("data-original-href",t.href||""),t.removeAttribute("href"))}),window.buyNowHandler&&"function"==typeof window.buyNowHandler.enhanceBuyNowButtons&&window.buyNowHandler.enhanceBuyNowButtons()}else{document.querySelectorAll("[data-mik-product-id].unsupported-region-disabled").forEach(t=>{if(t.classList.remove("buy-now-disabled","unsupported-region-disabled"),"BUTTON"===t.tagName)t.disabled=!1;else if("A"===t.tagName){const e=t.getAttribute("data-original-href");e&&(t.href=e)}}),window.buyNowHandler&&"function"==typeof window.buyNowHandler.enhanceBuyNowButtons&&window.buyNowHandler.enhanceBuyNowButtons()}},window.addEventListener("productsLoaded",function(){"function"==typeof window.styleUnsupportedRegionButtons&&window.styleUnsupportedRegionButtons()}),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",function(){setTimeout(function(){"function"==typeof window.styleUnsupportedRegionButtons&&window.styleUnsupportedRegionButtons()},100)}):setTimeout(function(){"function"==typeof window.styleUnsupportedRegionButtons&&window.styleUnsupportedRegionButtons()},100);
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.