Untitled
unknown
plain_text
2 years ago
12 kB
7
Indexable
(function () {
try {
var debug = 1;
var variation_name = "";
var testData = {
cards: [
{
"img": "https://expogrowth.in/wp-content/uploads/2023/08/Thumbnail.svg",
"title": "Mix & Match to Save 25%",
"titleLink": "https://www.gracobaby.com/bundles/",
"para": "25% Off 3 Items",
"promoCode": "BUNDLE3",
"ctaLink": ""
},
{
"img": "https://expogrowth.in/wp-content/uploads/2023/08/Thumbnail.svg",
"title": "Bundle & Save",
"titleLink": "https://www.gracobaby.com/graco-premier/graco-premier-midtown-collection/",
"para": "25% Off 2 Graco Premier Items",
"promoCode": "PREMIERBUNDLE",
"ctaLink": ""
},
{
"img": "https://expogrowth.in/wp-content/uploads/2023/08/Thumbnail.svg",
"title": "Up to 30% Off",
"titleLink": "https://www.gracobaby.com/featured-promotions",
"para": "30% Off Car Seats, Strollers, Travel Systems & Home",
"promoCode": "",
"ctaLink": "https://www.gracobaby.com/featured-promotions"
}
],
"icons": {
applied: "https://expogrowth.in/wp-content/uploads/2023/08/success-hover.svg",
success: "https://expogrowth.in/wp-content/uploads/2023/08/success-hover.svg",
arrow: "https://svgshare.com/i/wH6.svg",
moneyIcon: "https://svgshare.com/i/wGt.svg"
}
}
var genCards = function () {
const cards = testData.cards;
console.log("hello")
const cardsHTML = cards.reduce((t, crd) => {
let buttons = "";
if (crd.promoCode !== "") {
buttons = ` <button class="eg-cta" data-cpn="${crd.promoCode}">Apply Offer</button>
<button class="eg-cta eg-remove-cta eg-hidden-default">
<img src="${testData.icons.applied}"> Applied <span class="remove-text">Remove</span>
</button>`
} else {
buttons = `<button class="eg-cta" data-rd-url="${crd.ctaLink}">Visit Now</button>`;
}
return t += `
<div class="eg-slide">
<div class="eg-uppr-part">
<div class="eg-img"><img src="${crd.img}"></div>
<div class="eg-content">
<a class="eg-title" href="${crd.titleLink}">${crd.title}</a>
<span class="eg-time-left-msg eg-sub-title">${crd.para}</span>
</div>
</div>
<div class="eg-btm-part">${buttons}</div>
</div>
`;
}, "");
return cardsHTML;
}
var cardsHTML = genCards();
var egpopup1 = `<div class="eg-main-cta-wrapper container"> <button class="eg-main-cta eg-open-popup"> <div class="eg-img-grp"> <span class="eg-img"><img src="${testData.icons.moneyIcon}"></span> </div><span class="eg-text">Available Offers</span> <span class="eg-arrow"><img src="${testData.icons.arrow}"></span> </button> <div class="eg-wallet-popup eg-hide" aria-hidden="false"> <div class="eg-popup-container"> <div class="eg-content-box"> <div class="eg-success-msg"> <img src="${testData.icons.success}">Congratulations, you've added a coupon! </div><div class="eg-slider">${cardsHTML}</div></div></div></div></div>`;
function waitForElement(selector, trigger, delayInterval, delayTimeout) {
var interval = setInterval(function () {
if (
document &&
document.querySelector(selector) &&
document.querySelectorAll(selector).length > 0
) {
clearInterval(interval);
trigger();
}
}, delayInterval);
setTimeout(function () {
clearInterval(interval);
}, delayTimeout);
}
function live(selector, event, callback, context) {
function addEvent(el, type, handler) {
if (el.attachEvent) el.attachEvent("on" + type, handler);
else el.addEventListener(type, handler);
}
this.Element &&
(function (ElementPrototype) {
ElementPrototype.matches =
ElementPrototype.matches ||
ElementPrototype.matchesSelector ||
ElementPrototype.webkitMatchesSelector ||
ElementPrototype.msMatchesSelector ||
function (selector) {
var node = this,
nodes = (node.parentNode || node.document).querySelectorAll(selector),
i = -1;
while (nodes[++i] && nodes[i] != node);
return !!nodes[i];
};
})(Element.prototype);
function live(selector, event, callback, context) {
addEvent(context || document, event, function (e) {
var found,
el = e.target || e.srcElement;
while (el && el.matches && el !== context && !(found = el.matches(selector))) el = el.parentElement;
if (el && found) callback.call(el, e);
});
}
live(selector, event, callback, context);
}
const applyCoupon = (cpn) => {
const couponBox = document.querySelector("html body .cart-page .promo-code #couponCode");
if (couponBox) {
couponBox.value = cpn;
couponBox.parentElement.querySelector('button[type="submit"]').click();
}
}
const removeCoupon = () => {
const removeCta = document.querySelector("html body .coupons-and-promos .remove-coupon");
removeCta && removeCta.click();
}
const send = XMLHttpRequest.prototype.send
XMLHttpRequest.prototype.send = function () {
this.addEventListener('load', function () {
if (this.responseURL.indexOf("/Cart-RemoveCouponLineItem") != -1) {
const els = document.querySelectorAll(".eg-cpn-applied");
els.forEach(el => {
if (el) {
el.classList.remove("eg-cpn-applied");
document.querySelector(".eg-wallet-popup").classList.remove("eg-happen");
console.log("coupon removed");
}
});
} else if (this.responseURL.indexOf("/Cart-AddCoupon") != -1) {
const searchQuery = new URL(this.responseURL).search;
const code = searchToObject(searchQuery).couponCode;
const els = document.querySelectorAll(`[data-cpn*="${code}"]`);
els.forEach(el => {
if (el) {
const parentBox = el.closest(".eg-slide");
parentBox.classList.add("eg-cpn-applied");
changeMessageText("eg-wallet-popup", "Congratulations, you've added a coupon!");
console.log("coupon applied");
}
});
}
})
return send.apply(this, arguments)
}
function init() {
if (!document.querySelector(".eg-main-cta-wrapper")) {
document.querySelector('html body .loaded-cart').insertAdjacentHTML("beforebegin", egpopup1);
walletEvents();
// if any coupon applied
ifAnyPreappliedCoupon();
checkIfChooseItemInBag();
}
}
const walletEvents = () => {
// visit site btns click
live('.eg-wallet-popup button[data-rd-url]', "click", function () {
window.location.href = this.getAttribute("data-rd-url");
});
// open popup
live(".eg-open-popup", "click", function () {
document.querySelector(".eg-wallet-popup:not(.eg-sample-popup)").classList.toggle("eg-hide");
this.classList.toggle("eg-wallet-in");
});
// apply cpn on click
live(".eg-wallet-popup button[data-cpn]", "click", function () {
const cpn = this.getAttribute("data-cpn");
applyCoupon(cpn);
});
// remove cpn on click
live(".eg-wallet-popup button[data-cpn] + .eg-remove-cta", "click", function () {
const parentEl = this.closest(".eg-slide");
if (parentEl) {
removeCoupon();
}
});
// add to bag
live('.eg-wallet-popup button[data-add-to-cart]', "click", function () {
const pid = this.getAttribute("data-add-to-cart");
addToCart(pid);
});
//remove from bag
live('html body .eg-item-added-to-bag-choose .eg-cta.eg-remove-cta', "click", function () {
const uuid = this.getAttribute("data-uuid");
const removeCta = document.querySelector(`.remove-line-item button[data-uuid="${uuid}"]`);
removeCta && removeCta.click();
this.closest(".eg-item-added-to-bag-choose") && this.closest(".eg-item-added-to-bag-choose").classList.remove("eg-item-added-to-bag-choose");
this.closest(".eg-happen") && this.closest(".eg-happen").classList.remove("eg-happen");
});
}
const ifAnyPreappliedCoupon = () => {
waitForElement("html body .coupons-and-promos .coupon-text", function () {
const cCode = document.querySelector("html body .coupons-and-promos .coupon-text").getAttribute("aria-label").replace("Promo Applied", "").trim();
const els = document.querySelectorAll(`[data-cpn*="${cCode}"]`);
els.forEach(el => {
if (el) {
const parentBox = el.closest(".eg-slide");
parentBox.classList.add("eg-cpn-applied");
changeMessageText("eg-wallet-popup", "Congratulations, you've added a coupon!");
}
});
}, 50, 15000);
}
function searchToObject(searchQuery) {
var pairs = searchQuery.substring(1).split("&"),
obj = {},
pair,
i;
for (i in pairs) {
if (pairs[i] === "") continue;
pair = pairs[i].split("=");
obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
}
return obj;
}
const changeMessageText = (walletSelector, msg) => {
[...document.querySelector(`html body .${walletSelector} .eg-success-msg`).childNodes].slice(-1)[0].textContent = msg;
document.querySelector(`html body .${walletSelector}`).classList.add("eg-happen");
}
function addToCart(pid) {
var form = new FormData();
form.append('pid', pid);
form.append('quantity', '1');
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
data = JSON.parse(this.responseText);
console.log(data.pliUUID);
console.log("added to cart");
window.location.reload();
}
};
xhttp.open("POST", "https://www.yankeecandle.com/on/demandware.store/Sites-homefragranceus-Site/en_US/Cart-AddProduct", true);
xhttp.send(form);
}
const checkIfChooseItemInBag = () => {
waitForElement(".product-grouping .line-item-name", function () {
document.querySelectorAll(".product-grouping .line-item-name").forEach(itm => {
if (itm) {
const txt = itm.innerText.trim().toUpperCase();
const removeEl = itm.closest(".card").querySelector(".remove-line-item");
if (document.querySelector(`[data-choose-title="${txt}"]`)) {
document.querySelector(`[data-choose-title="${txt}"]`).classList.add("eg-item-added-to-bag-choose");
document.querySelector(`[data-choose-title="${txt}"] .eg-remove-cta`).setAttribute("data-uuid", `${removeEl.querySelector("button[data-uuid]").getAttribute("data-uuid")}`);
changeMessageText("eg-wallet-popup.eg-sample-popup", "Congratulations, you've added a sample!");
}
}
})
}, 1000, 15000);
}
waitForElement('html body .loaded-cart', init, 50, 15000);
} catch (e) {
if (debug) console.log(e, "error in Test" + variation_name);
}
})();
Editor is loading...