Untitled
unknown
plain_text
2 years ago
5.5 kB
11
Indexable
(function(){
var style=document.createElement('style');style.type='text/css';style.appendChild(document.createTextNode('html body .product-variations .attribute__variants:not([data-selected="all"])+div.product-options { display: none !important;}html body .product-variations .attribute__variants>li:nth-child(n+2):not(.eg-some-selected) { display: none !important;}'));document.head.appendChild(style);
(function (w) {
"use strict";
var tag = "cv-2",
debug = document.cookie.indexOf("cfQA") > -1,
window = typeof unsafeWindow !== "undefined" ? unsafeWindow : w;
var preSelected = false;
window[tag] = {
log: function (msg) {
if (debug) console.log("[EXPO]", tag, "-->", msg);
},
waitForElement: function (cssSelector, callback) {
var stop,
elementCached,
timeout,
check = function () {
try {
elementCached = document.querySelector(cssSelector);
if (stop) return;
if (elementCached) {
callback(elementCached);
clearTimeout(timeout);
window[tag].log(cssSelector + " found");
} else {
window.requestAnimationFrame(check);
}
} catch (err) {
window[tag].log(err.message);
}
};
window.requestAnimationFrame(check);
timeout = setTimeout(function () {
stop = true;
window[tag].log(cssSelector + " not found");
}, 5000);
},
testStart: function () {
try {
this.waitForElement("body", function (docBody) {
docBody.classList.add(tag);
});
// INITIALIZE THE TEST
initVariation();
window[tag].log("test running");
} catch (err) {
window[tag].log(err.message);
}
},
};
// INITIALIZE VARIATION
window[tag].testStart();
function initVariation() {
window[tag].waitForElement(".product-variations .attribute__variants> li:last-child", () => {
const selectedEls = document.querySelectorAll('html body .product-variations .attribute__variants> li .attribute__swatch--selected');
selectedEls.forEach((selectedEl) => {
// for crr selected el
const liel = selectedEl.closest(".attribute__variants-group");
const prevSib = liel.previousElementSibling;
if (prevSib && !prevSib.querySelector(".attribute__swatch--selected.selected")) {
// deselect this and all its below options
deseletOption(liel);
deseletAllBellowOpts(liel);
} else if (!prevSib || (prevSib && prevSib.querySelector(".attribute__swatch--selected.selected"))) {
isLastElement(liel);
managePreselect(liel);
// for next el
var nextEl = liel.nextElementSibling;
if (nextEl) {
nextEl.classList.add("eg-some-selected");
nextEl.scrollIntoView({ behavior: "smooth" });
isLastElement(nextEl);
managePreselect(nextEl);
}
}
});
});
}
const send = XMLHttpRequest.prototype.send
XMLHttpRequest.prototype.send = function () {
this.addEventListener('load', function () {
if (this.responseURL.includes("/Product-Variation")) {
initVariation();
changeToRecommended();
}
})
return send.apply(this, arguments)
}
function isLastElement(element) {
let isLastEl = false;
if (element && element.parentNode) {
const parent = element.parentNode;
const children = Array.from(parent.children);
const lastChild = children[children.length - 1];
isLastEl = lastChild === element;
}
if (isLastEl) {
document.querySelector("html body .product-variations .attribute__variants").setAttribute('data-selected', "all");
}
}
const preseletOpt = function (el) {
const isSeleveLength = el.querySelector("#sleeveLength");
if (isSeleveLength) {
const seleveCta = el.querySelector(".attribute--recommended div");
if (!seleveCta.parentElement.classList.contains("selected")) {
seleveCta.click();
preSelected = true;
}
}
}
const deseletAllBellowOpts = (el) => {
const startElement = el
if (startElement) {
const nextSiblings = [];
let nextSibling = startElement.nextElementSibling;
while (nextSibling) {
nextSiblings.push(nextSibling);
nextSibling = nextSibling.nextElementSibling;
}
}
nextSiblings.forEach(sib => {
deseletOption(sib);
});
}
const deseletOption = function (el) {
preSelected = false;
const selectedOpt = el.querySelector(".attribute__swatch--selected.selected");
if (selectedOpt) {
selectedOpt.querySelector("div").click();
}
}
const managePreselect = (el) => {
if (!preSelected) {
preseletOpt(el);
}
}
const changeToRecommended = () => {
window[tag].waitForElement("html body .product-variations .attribute__variants> li #sleeveLength", function () {
const isSeleveLength = document.querySelector("html body .product-variations .attribute__variants> li #sleeveLength");
if (isSeleveLength) {
const el = isSeleveLength.closest(".attribute__variants-group");
const toolTip = el.querySelector(".attribute--recommended .attribute__box-tip");
if (toolTip) {
toolTip.innerText = "RECOMMENDED";
}
}
});
}
})(window);
})();Editor is loading...