/* eslint-disable */ 'use strict'; // scriptUrl example: https://dynamic-checkout-test.nofraud-test.com/latest var script = document.currentScript || document.querySelector('script[src*="nf-src.js"]'); var scriptUrl = 'https://dynamic-checkout.nofraud.com'; if (script && script.src) { var scriptSrcArray = script.src.split('/') scriptSrcArray.splice(-2, 2); scriptUrl = scriptSrcArray.join('/') + '/index.html'; } document.addEventListener('DOMContentLoaded', function (event) { /** * Gets initial cart data from Storefront API * and adds event listeners for all "Checkout" buttons * to open NF application iframe */ function setCookie(name, value, days) { var expires = ''; if (days) { var date = new Date(); date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); expires = `; expires=${date.toUTCString()}`; } document.cookie = `${name}=${value || ''}${expires}; path=/`; } function addNFButton() { /** * Creates and opens the application iframe * @param {String} cartId Current cart ID */ function openCheckOutFrame(cartId) { var script = document.querySelector('[data-nf-merchant-id]'); if (script && cartId) { var merchantId = script.dataset.nfMerchantId; if (merchantId) { var iframe = document.createElement('iframe'); iframe.setAttribute('title', 'NoFraud MVP'); var iframeOverlay = document.createElement('div'); iframeOverlay.id = 'nf-iframe-ovl'; iframeOverlay.style.cssText = 'width: 100vw; height: 100vh; background: rgb(255 255 255 / 0.9); display: flex; justify-content: center; padding-top: 70px;' + 'z-index: 9999999; position: fixed; top: 0; backdrop-filter: blur(4px);'; document.body.appendChild(iframeOverlay); document.body.style.overflowY = 'hidden'; var iframeWrapper = document.createElement('div'); iframeWrapper.style.cssText = 'position: relative; width: 882px; display: flex; align-items: center; justify-content: center; height: auto; padding 20px'; iframeOverlay.appendChild(iframeWrapper); var src = scriptUrl + '?cartId=' + cartId + '&merchantId=' + merchantId + '&storeUrl=' + window.location.origin; // For testing data only! src = src + '&deviceId=fe8443b1-96e0-4f60-b9b2-cf6e86e493c6'; iframe.src = src; iframe.style.cssText = 'border: none; width: 100%; height: 100%;'; iframeWrapper.appendChild(iframe); } } } fetch('/api/storefront/carts?include=', { credentials: 'include', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, }).then(function (response) { response.json().then(function (data) { if (data.length > 0) { document.body.dataset.cartId = data[0].id; var links = document.querySelectorAll('a'); links.forEach(link => { if (link.href.indexOf(location.hostname + '/checkout') !== -1) { link.dataset.cartId = data[0].id; link.addEventListener('click', function (e) { e.stopPropagation(); e.preventDefault(); openCheckOutFrame(this.dataset.cartId); }); } }); document.body.addEventListener('click', function (e) { var target = e.target; if ( target.tagName.toLowerCase() === 'a' && target.href.indexOf('/checkout') !== -1 && !target.hasAttribute('data-cart-id') ) { e.stopPropagation(); e.preventDefault(); openCheckOutFrame(document.body.dataset.cartId); } }); } }); }); } window.onmessage = function (e) { if (scriptUrl.lastIndexOf(e.origin, 0) !== 0) { return; } var messageData = e.data; if (messageData.action === 'close-iframe') { document.querySelector('#nf-iframe-ovl').remove(); document.body.style.overflowY = 'visible'; if (messageData.data.update) { window.location.href = '/'; } return; } if (messageData.action === 'set-cookie') { setCookie(messageData.data.name, messageData.data.value, messageData.data.days); return; } }; window.addEventListener('load', addNFButton); });