Untitled

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

    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)
                .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 => {
                    disEle =  document.querySelector("main.product  .product-price > .product-price__detail");
                    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 currentPrice = ele.parentElement.querySelector(".product-price__main");
                        if (wasPrice) {
                            let wasP = parseFloat(wasPrice.getAttribute("data-was-price"));
                            let crrP = parseFloat(currentPrice.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);
                            }
                        }
                    });
        };
        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.conversion-7-1 main.product .product-price .conversion-7-1-discount,
html body.conversion-7-1 main.product .product-price__detail-discount {
    color: #E10022 !important;
    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-separator {
    margin: 0 4px !important;
}
html body.conversion-7-1 .product-price__detail-discount:not(.conversion-7-1-discount), html body.conversion-7-1 span.conversion-7-1-discount + span{
    display: none !important;
}
</style>
Editor is loading...