window.Codex = function() { let overrides = JSON.parse(localStorage.getItem('codex-overrides')) || {} let init = function() { if(!window.codex) { window.codex = { api: 'https://becycle-dus.codexfit.com', translations: 'https://becycle-dus.codexfit.com/api/v1/customer/translations', stripe_key: 'pk_live_iDgESt9G3n3fx9nOy8HQBNv300SwWE8x35', timezone: 'Europe/Berlin', components: {}, stageIds: ['codex-app'], locale: 'de-DE', currency: 'EUR', currencyDecimals: 2, app_id: 'becycle-dus', delimiters: ['{{','}}'], routerConfig: { mode: 'hash' }, scriptUrl: 'https://api-v3-rc6.codexfit.com/app.js', styleUrl: 'https://api-v3-rc6.codexfit.com/styles/all.css', auto_configure: { modals: { 'codex-login-register': { props: { ':show-login-default': true } }, 'codex-checkout': { modalProps: { 'x-position': 'right', 'y-position': 'top' }, props: { ':show-login-default': true } }} }, registration_fields: {"first_name":{"type":"text","group":"","handle":"first_name","title":"","required":false,"placeholder":"First Name","validation":"","label_translation":"register_fields.first_name","placeholder_translation":"register_fields.first_name_placeholder"},"last_name":{"type":"text","group":"","handle":"last_name","title":"","required":false,"placeholder":"Last Name","validation":"","label_translation":"register_fields.last_name","placeholder_translation":"register_fields.last_name_placeholder"},"email":{"type":"email","group":"","handle":"email","title":"","required":false,"placeholder":"Email","validation":"","label_translation":"register_fields.email","placeholder_translation":"register_fields.email_placeholder"},"password":{"type":"password","group":"","handle":"password","title":"","required":false,"placeholder":"Password","validation":"","label_translation":"register_fields.password","placeholder_translation":"register_fields.password_placeholder"},"password_confirmation":{"type":"password","group":"","handle":"password_confirmation","title":"","required":false,"placeholder":"Confirm password","validation":"","label_translation":"register_fields.password_confirmation","placeholder_translation":"register_fields.password_confirmation_placeholder"},"dob":{"type":"date","group":"","handle":"dob","title":"","required":false,"placeholder":"Select DOB","validation":"","label_translation":"register_fields.dob","placeholder_translation":"register_fields.dob_placeholder"},"telephone":{"type":"telephone","group":"","handle":"telephone","title":"","required":false,"placeholder":"","validation":"","label_translation":"register_fields.telephone","placeholder_translation":"register_fields.telephone_placeholder"},"shoe_size":{"type":"select","group":"metafields","handle":"shoe_size","title":"","required":false,"placeholder":"Select","validation":"","label_translation":"register_fields.shoe_size","placeholder_translation":"register_fields.shoe_size_placeholder","options":[{"value":"36","displayValue":"register_fields.shoe_size_option.36"},{"value":"37","displayValue":"register_fields.shoe_size_option.37"},{"value":"38","displayValue":"register_fields.shoe_size_option.38"},{"value":"39","displayValue":"register_fields.shoe_size_option.39"},{"value":"40","displayValue":"register_fields.shoe_size_option.40"},{"value":"41","displayValue":"register_fields.shoe_size_option.41"},{"value":"42","displayValue":"register_fields.shoe_size_option.42"},{"value":"43","displayValue":"register_fields.shoe_size_option.43"},{"value":"44","displayValue":"register_fields.shoe_size_option.44"},{"value":"45","displayValue":"register_fields.shoe_size_option.45"},{"value":"46","displayValue":"register_fields.shoe_size_option.46"},{"value":"47","displayValue":"register_fields.shoe_size_option.47"},{"value":"48","displayValue":"register_fields.shoe_size_option.48"},{"value":"49","displayValue":"register_fields.shoe_size_option.49"},{"value":"own-shoes","displayValue":"register_fields.shoe_size_option.own-shoes"}]},"email_booking_reminder_notifications":{"type":"checkbox","group":"metafields","handle":"email_booking_reminder_notifications","title":"","required":false,"placeholder":"","validation":"","label_translation":"register_fields.email_booking_reminder_notifications","placeholder_translation":"register_fields.email_booking_reminder_notifications_placeholder","default":false},"opt_in_email":{"type":"opt_in","group":"opt_ins","handle":"opt_in_email","title":"","required":false,"placeholder":"","validation":"","label_translation":"register_fields.opt_in_email","placeholder_translation":"register_fields.opt_in_email_placeholder","default":false,"inverted":false}}, update_fields: {"first_name":{"type":"text","group":"","handle":"first_name","title":"","required":false,"placeholder":"First Name","validation":"","label_translation":"update_fields.first_name","placeholder_translation":"update_fields.first_name_placeholder"},"last_name":{"type":"text","group":"","handle":"last_name","title":"","required":false,"placeholder":"Last Name","validation":"","label_translation":"update_fields.last_name","placeholder_translation":"update_fields.last_name_placeholder"},"email":{"type":"email","group":"","handle":"email","title":"","required":false,"placeholder":"Email","validation":"","label_translation":"update_fields.email","placeholder_translation":"update_fields.email_placeholder"},"password":{"type":"password","group":"","handle":"password","title":"","required":false,"placeholder":"Password","validation":"","label_translation":"update_fields.password","placeholder_translation":"update_fields.password_placeholder"},"password_confirmation":{"type":"password","group":"","handle":"password_confirmation","title":"","required":false,"placeholder":"Confirm password","validation":"","label_translation":"update_fields.password_confirmation","placeholder_translation":"update_fields.password_confirmation_placeholder"},"dob":{"type":"date","group":"","handle":"dob","title":"","required":false,"placeholder":"Select DOB","validation":"","label_translation":"update_fields.dob","placeholder_translation":"update_fields.dob_placeholder"},"telephone":{"type":"telephone","group":"","handle":"telephone","title":"","required":false,"placeholder":"Mobile number","validation":"","label_translation":"update_fields.telephone","placeholder_translation":"update_fields.telephone_placeholder"},"email_booking_reminder_notifications":{"type":"checkbox","group":"metafields","handle":"email_booking_reminder_notifications","title":"","required":false,"placeholder":"","validation":"","label_translation":"update_fields.email_booking_reminder_notifications","placeholder_translation":"update_fields.email_booking_reminder_notifications_placeholder","default":false},"opt_in_email":{"type":"opt_in","group":"opt_ins","handle":"opt_in_email","title":"","required":false,"placeholder":"","validation":"","label_translation":"update_fields.opt_in_email","placeholder_translation":"update_fields.opt_in_email_placeholder","default":false,"inverted":false},"shoe_size":{"type":"select","group":"metafields","handle":"shoe_size","title":"","required":false,"placeholder":"Shoe Size","validation":"","label_translation":"update_fields.shoe_size","placeholder_translation":"update_fields.shoe_size_placeholder","options":[{"value":"36","displayValue":"update_fields.shoe_size_option.36"},{"value":"37","displayValue":"update_fields.shoe_size_option.37"},{"value":"38","displayValue":"update_fields.shoe_size_option.38"},{"value":"39","displayValue":"update_fields.shoe_size_option.39"},{"value":"40","displayValue":"update_fields.shoe_size_option.40"},{"value":"41","displayValue":"update_fields.shoe_size_option.41"},{"value":"42","displayValue":"update_fields.shoe_size_option.42"},{"value":"43","displayValue":"update_fields.shoe_size_option.43"},{"value":"44","displayValue":"update_fields.shoe_size_option.44"},{"value":"45","displayValue":"update_fields.shoe_size_option.45"},{"value":"46","displayValue":"update_fields.shoe_size_option.46"},{"value":"47","displayValue":"update_fields.shoe_size_option.47"},{"value":"48","displayValue":"update_fields.shoe_size_option.48"},{"value":"49","displayValue":"update_fields.shoe_size_option.49"},{"value":"own-shoes","displayValue":"update_fields.shoe_size_option.own-shoes"}]},"address_1":{"type":"text","group":"metafields","handle":"address_1","title":"","required":false,"placeholder":"Address line 1","validation":"","label_translation":"update_fields.address_1","placeholder_translation":"update_fields.address_1_placeholder"},"address_2":{"type":"text","group":"metafields","handle":"address_2","title":"","required":false,"placeholder":"Address line 2","validation":"","label_translation":"update_fields.address_2","placeholder_translation":"update_fields.address_2_placeholder"},"city":{"type":"text","group":"metafields","handle":"city","title":"","required":false,"placeholder":"City","validation":"","label_translation":"update_fields.city","placeholder_translation":"update_fields.city_placeholder"},"postcode":{"type":"text","group":"metafields","handle":"postcode","title":"","required":false,"placeholder":"Postcode","validation":"","label_translation":"update_fields.postcode","placeholder_translation":"update_fields.postcode_placeholder"}} } Object.keys(overrides).map(x => { window.codex[x] = overrides[x] }) var observer = new MutationObserver(function() { if (document.body) { if(window.codex.translations) { let translations = document.createElement("script") translations.type = "text/javascript" translations.src = window.codex.translations translations.addEventListener('load', function() { console.log('%cCodex |%c Translations loaded', 'font-weight: bold', 'font-weight: normal') document.dispatchEvent(new Event('codex-initialise')) }) document.head.appendChild(translations) console.log('%cCodex |%c Added translations', 'font-weight: bold', 'font-weight: normal') } if(window.codex.scriptUrl) { document.addEventListener("DOMContentLoaded", function() { let cs = document.createElement("script") cs.type = "text/javascript" cs.src = window.codex.scriptUrl cs.defer = true if(window.codex.momentLocaleUrl) { cs.addEventListener("load", function() { let mls = document.createElement("script") mls.type = "text/javascript" mls.src = window.codex.momentLocaleUrl mls.defer = true document.body.appendChild(mls) console.log('%cCodex |%c Added moment locale script', 'font-weight: bold', 'font-weight: normal') }) } document.body.appendChild(cs) console.log('%cCodex |%c Added app script', 'font-weight: bold', 'font-weight: normal') }) } if(window.codex.styleUrl) { let css = document.createElement("link") css.media = "all" css.type = "text/css" css.rel = "stylesheet" css.href = window.codex.styleUrl document.head.appendChild(css) console.log('%cCodex |%c Added default styles', 'font-weight: bold', 'font-weight: normal') } if(window.codex?.auto_configure?.modals) { Object.entries(window.codex.auto_configure.modals).forEach(([component, attrs]) => { div = document.createElement("div") div.id = component div.dataset.codex = "" modal = document.createElement("codex-modal") modal.setAttribute('modal-name', component) Object.entries(attrs.modalProps ?? {}).forEach(([key, value]) => { modal.setAttribute(key, value) }) vueComponent = document.createElement(component) Object.entries(attrs.props ?? {}).forEach(([key, value]) => { vueComponent.setAttribute(key, value) }) modal.appendChild(vueComponent) div.appendChild(modal) document.head.appendChild(div) }) document.addEventListener("click", (event) => { if(event.target?.dataset.codexModalOpen) { event.stopPropagation() document.dispatchEvent(new Event('codex.modal.open.' + event.target.dataset.codexModalOpen)) } if(event.target?.dataset.codexModalClose) { event.stopPropagation() document.dispatchEvent(new Event('codex.modal.close.' + event.target.dataset.codexModalClose)) } if(event.target?.dataset.codexModalToggle) { event.stopPropagation() document.dispatchEvent(new Event('codex.modal.toggle.' + event.target.dataset.codexModalToggle)) } }) console.log('%cCodex |%c Added default modals', 'font-weight: bold', 'font-weight: normal') } observer.disconnect(); } }) observer.observe(document.documentElement, {childList: true}); console.log(`%cCodex | %cConfiguring...`, 'font-weight: bold', 'font-weight: normal' ) if(localStorage.getItem('codex-overrides')) { console.log('%cCodex | %cWarning! Using custom overrides %o', 'font-weight: bold', 'color: rgb(217,31,38)', overrides) // Object.keys(overrides).map(x => { // console.log('%c ' + x + ': ' + overrides[x], 'display: block; color: red') // }) } // if(localStorage.getItem('codex-script-url')) { // console.log(`%cWarning: Using custom script URL: ` + localStorage.getItem('codex-script-url'), 'display: block; font-size: 16px;color: red);') // } } } let addStage = function(id) { window.codex.stageIds.push(id) } let store = function(key, value) { window.codex[key] = value overrides[key] = value localStorage.setItem('codex-overrides', JSON.stringify(overrides)) } let set = function(key, value) { window.codex[key] = value } let unset = function(key) { delete window.codex[key] delete overrides[key] localStorage.setItem('codex-overrides', JSON.stringify(overrides)) } return { addStage, store, set, unset, init, } } Codex().init();