Untitled

 avatar
unknown
plain_text
2 years ago
5.9 kB
4
Indexable
<script>
   (function() {
    const EXPERIMENT_NO = '7.1';
    const VARIANT_NO = '2';

    const GOOGLE_ANALYTICS_TRACKING_ID = 'UA-62398555-4';

    const LOG_PREFIX = '[CONVERSION] ' + EXPERIMENT_NO + ' -->';
    const SELECTOR_PREFIX = 'conversion-' + EXPERIMENT_NO.replace('.', '-');
    const STORAGE_PREFIX = 'CONVERSION_' + EXPERIMENT_NO.replace('.', '_');

    const DEBUGGING_TOKEN_NAME = 'DEBUGGING';
    const DEBUGGING_ENABLED = document.cookie.match(
        new RegExp('(^| )' + DEBUGGING_TOKEN_NAME + '=ENABLED([^;]*)', 'i')
    );

    const utils = {};

    utils.log = (...args) => {
        DEBUGGING_ENABLED && console.log(LOG_PREFIX, ...args);
    };

    utils.error = (...args) => {
        DEBUGGING_ENABLED && console.error(LOG_PREFIX, ...args);
    };

    utils.dispatchEvent = (event) => {
        let stop;

        const check = () => {
            if (stop) return;

            if (!(
                    window.ga instanceof Function &&
                    window.ga.getAll instanceof Function
                )) return requestAnimationFrame(check);

            stop = true;

            const properties = window.ga.getAll();

            let analytics;

            if (GOOGLE_ANALYTICS_TRACKING_ID)
                analytics = properties.find(
                    property =>
                    property.get('trackingId') === GOOGLE_ANALYTICS_TRACKING_ID
                );

            analytics = analytics ? analytics : properties[0];

            if (analytics) analytics.send(
                'event',
                'Adobe Target',
                EXPERIMENT_NO + ' -- ' + VARIANT_NO,
                event, { nonInteraction: true }
            );
        };

        requestAnimationFrame(check);
    };

    utils.waitUntil = (condition, wait = 5000) => {
        return new Promise((resolve, reject) => {
            let stop;

            const timeout = wait && setTimeout(() => {
                stop = true;
                reject();
            }, wait);

            const check = () => {
                if (stop) return;
                if (!condition()) return requestAnimationFrame(check);

                clearTimeout(timeout);
                resolve(condition());
            };

            requestAnimationFrame(check);
        });
    };

    utils.dispatchEvent('experiment shown');

    try {
        let disEle;
        const init = (() => {
            utils.log('VARIANT #' + VARIANT_NO + ' RUNNING');

            utils
                .waitUntil(() => document.body, 0)
                .then(element => element.classList.add(SELECTOR_PREFIX))
                .catch((error) => { utils.error(error); });
            utils
                .waitUntil(() => document.querySelector("main.product  .product-price > .product-price__detail"))
                .then(element => {
                   addDiscount();
                   observePrice();
                })
                .catch((error) => { utils.error(error); });
        })();
        const addDiscount = () => {
            document.querySelectorAll("main.product  .product-price > .product-price__detail").forEach(ele => {
                        let wasPrice = ele.querySelector(".product-price__was");
                        let crrPrice = ele.parentElement.querySelector(".product-price__main");
                        if (wasPrice) {
                            let wasP = parseFloat(wasPrice.getAttribute("data-was-price"));
                            let crrP = parseFloat(crrPrice.getAttribute("data-product-price"));
                            let discount = (wasP - crrP).toFixed(2);
                            if (!ele.querySelector('.'+SELECTOR_PREFIX+'-discount')) {
                                let egDiscountHTML = '<span class="'+SELECTOR_PREFIX+'-discount">Save £'+discount+'</span>';
                                ele.insertAdjacentHTML("afterbegin", egDiscountHTML);
                            }
                            // MOVING PERCENTAGE UP TO THE PRICE
                            let cvPr = ele.querySelector('.product-price__detail-discount:not(.'+SELECTOR_PREFIX+'-discount)');
                            cvPr.innerText = cvPr.innerText.replace("Save ", "-");
                            let cvTarget = ele.parentElement.querySelector(".product-price__detail-inline");
                            cvPr.classList.remove('product-price__detail-discount');

                            cvPr.classList.add(SELECTOR_PREFIX+'-pr-dis');

                            cvTarget.insertAdjacentElement("beforeend", cvPr);
                        }
                    });
        };
        const observePrice = () => {
			var observer = new MutationObserver(function (mutationsList, obs) {
				addDiscount();
			});

			observer.observe(disEle, {
				attributes: true,
				characterData: true,
				childList: true,
				subtree: true,
			});
		};
    } catch (error) {
        utils.error(error);
    }
})();
</script>

<style>
    html body.conversion-7-1 main.product .product-price .product-price__main,
html body main.product .product-price__detail-discount:not(.conversion-7-1-pr-dis){
    color: #E10022 !important;
    font-family: ALDISUEDOffice,sans-serif; 
}

html body.conversion-7-1 .conversion-7-1-pr-dis {
    position: absolute;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
    background: #e10022;
    color: #fff !important;
    border-radius: 5px;
    padding: 2px 8px;
    font-weight:700;
    font-family: ALDISUEDOffice,sans-serif;
}
html body.conversion-7-1  span.conversion-7-1-discount {
    color: #E10022 !important;
    font-family: ALDISUEDOffice,sans-serif;
    font-size:16px;
}
html body.conversion-7-1 main.product .product-price__detail-inline {
    position: relative;
}

html body.conversion-7-1 main.product .product-details__sticky-atc .conversion-7-1-pr-dis {
    display: none !important;
}
</style>
Editor is loading...