// Isolate JS in a function (function (ec, Ecwid) { 'use strict'; const EC_APP_ID = 'datatrans'; const EC_APP_LOCATION = 'datatrans-payment-with-callback.ecwid-labs.com'; const EW_STORE_ID = 'ecwid_storeId'; const EW_LANGUAGE = 'ecwid_language'; const EW_TOKEN = 'ecwid_token'; const EW_ORDER_ID = 'ecwid_orderId'; const EW_ORDER_TOTAL = 'ecwid_orderTotal'; // Initialize extra fields ec.order = ec.order || {}; ec.order.extraFields = ec.order.extraFields || {}; // Since Ecwid language is nto available in payment data // Make it available via order extra fields ec.order.extraFields.lang = { 'value': '' }; /** * Copyright (c) 2011-present Qualiteam software Ltd. All rights reserved. * See https://www.x-cart.com/license-agreement.html for license details. * * @author Michael Bugrov */ var addBirthDateField = function () { ec.order = ec.order || {}; ec.order.extraFields = ec.order.extraFields || {}; var section = 'payment_details'; if (document.getElementsByClassName('ecwid-Checkout').length) { // old layout fallback section = 'billing_address'; } ec.order.extraFields.birth_date = { 'title': 'Birth date', 'titleTranslated': { 'en': 'Birth date', 'fr': 'Date de naissance', 'de': 'Geburtstag', 'it': 'Data di nascita' }, 'required': false, 'type': 'datetime', 'checkoutDisplaySection': section, 'orderDetailsDisplaySection': 'customer_info', 'datePickerOptions': { minDate: new Date(new Date().getTime() - 150*365*24*60*60*1000), maxDate: new Date(), showTime: false }, }; Ecwid.refreshConfig && Ecwid.refreshConfig(); }; var ecwidLoadedHandler = function () { if (!Ecwid.getStoreConfiguration() || !Ecwid.getStoreConfiguration().paymentMethods || !Ecwid.getStoreConfiguration().paymentMethods?.find(p => 'datatrans-callback' === p.appClientId) ) { return; } // Client store ID var storeId = Ecwid.getOwnerId(); var language = Ecwid.getStorefrontLang(); // Used to search payment var paymentName = 'Datatrans'; // Update language once Ecwid API loaded ec.order.extraFields.lang.value = language; var createHeadStyle = function() { var element = document.createElement('style'), id = EC_APP_ID + '-styles'; element.type = 'text/css'; element.setAttribute('id', id); document.querySelector('head').appendChild(element); return document.getElementById(id); } var headStyle = createHeadStyle(); var getPaymentMethodsContainer = function(label) { var container = label.parentNode.getElementsByClassName('payment-methods'); if (container.length === 0) { container = [document.createElement('div')]; container[0].className += 'payment-methods'; container[0].style.paddingLeft = '18px'; label.parentNode.appendChild(container[0]); } return container[0]; } var getPaymentMethodElement = function(container, data) { var div = document.createElement('div'); div.style.display = 'inline-block'; var logo = document.createElement('img'); logo.setAttribute('title', data.name); logo.setAttribute('src', data.img); logo.style['max-width'] = '40px'; div.appendChild(logo); if (container.children.length !== 0) { div.style.paddingLeft = '5px'; } return div; } var updatePaymentData = function(list) { if (!document.getElementsByClassName('ecwid-Checkout')[0]) return; var optionsContainers = document.getElementsByClassName('ecwid-Checkout')[0].getElementsByClassName('ecwid-PaymentMethodsBlock-PaymentOption'); for (var i = 0; i < optionsContainers.length; i++) { var radioContainer = optionsContainers[i].getElementsByClassName('gwt-RadioButton')[0]; var label = radioContainer.getElementsByTagName('label')[0]; // Search payment radio button by its name (Ecwid limitation) if (label && label.innerHTML.indexOf(paymentName) !== -1) { var container = getPaymentMethodsContainer(label); if ( container && container.getElementsByTagName('div').length === 0 ) { for (item in list) { var data = list[item]; var payment = getPaymentMethodElement(container, data); container.appendChild(payment); } } } } } var getPaymentData = function(orderTotal) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var response = JSON.parse(this.response); if ( response && response.success && response.result ) { updatePaymentData(response.result); } } }; var params = [ EW_STORE_ID + '=' + storeId, EW_LANGUAGE + '=' + language, EW_ORDER_TOTAL + '=' + orderTotal, 'xhr=ajax' ]; var xhr = 'https://' + EC_APP_LOCATION + '/?controller=payment&action=getPaymentData&' + params.join('&'); xhttp.open('GET', xhr, true); try { xhttp.send(); } catch (e) { console.log(e); } } var checkoutShippingDetailsHandler = function(page) { var sCountry = document.getElementById('select-Country-Box'); var updateSUI = function(value) { var style = ''; headStyle.textContent = style; } if (sCountry) { sCountry.addEventListener('change', function(event) { var value = event.target.value; updateSUI(value); }); updateSUI(sCountry.value); } } var checkoutPaymentDetailsHandler = function(page) { addBirthDateField(); var bSameAsShipping = document.querySelector('.ecwid-AddressForm-fields-topPanel input[type="checkbox"]'); var bCountry = document.getElementById('select-Country-Box'); var updateBUI = function(value) { var style = ''; headStyle.textContent = style; } if (bSameAsShipping) { bSameAsShipping.addEventListener('change', function(event) { var value = bCountry.value; updateBUI(value); }); } if (bCountry) { bCountry.addEventListener('change', function(event) { var value = event.target.value; updateBUI(value); }); updateBUI(bCountry.value); } Ecwid.Cart.calculateTotal(function(order) { getPaymentData(order.total); }) } var ecwidPageLoadedHandler = function(page) { switch (page.type) { case 'CHECKOUT_SHIPPING_ADDRESS': checkoutShippingDetailsHandler(page); break; case 'CHECKOUT_PAYMENT_DETAILS': checkoutPaymentDetailsHandler(page); break; } } Ecwid.OnPageLoaded.add(ecwidPageLoadedHandler); } Ecwid.OnAPILoaded.add(ecwidLoadedHandler); })(ec, Ecwid);