window.Codex = function() { let overrides = JSON.parse(localStorage.getItem('codex-overrides')) || {} let init = function() { if(!window.codex) { window.codex = { api: 'https://nordic-strong.codexfit.com', translations: 'https://nordic-strong.codexfit.com/api/v1/customer/translations', stripe_key: 'pk_live_51LffVrKogJTo9w1yvjsn3uujfzaycehTT9oZ5X2h0mdxgNJsde3Ld5ImPYCve60snNCJEcylJnDSL5YjaLSBnXKM00aZw0OEqW', timezone: 'Europe/Copenhagen', components: {}, stageIds: ['codex-app'], locale: 'da-DK', currency: 'DKK', currencyDecimals: 2, app_id: 'nordic-strong', 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":"metafields","handle":"dob","title":"","required":false,"placeholder":"Enter your date of birth","validation":"","label_translation":"register_fields.dob","placeholder_translation":"register_fields.dob_placeholder"},"telephone":{"type":"telephone","group":"","handle":"telephone","title":"","required":false,"placeholder":"Mobile number","validation":"","label_translation":"register_fields.telephone","placeholder_translation":"register_fields.telephone_placeholder"},"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":"Enter your date of birth","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"},"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},"favourite-class":{"type":"select","group":"metafields","handle":"favourite-class","title":"","required":false,"placeholder":"Favourite Class","validation":"","label_translation":"update_fields.favourite-class","placeholder_translation":"update_fields.favourite-class_placeholder","options":[{"value":"Nordic Strong","displayValue":"update_fields.favourite-class_option.Nordic Strong"},{"value":"Nordic Cardio","displayValue":"update_fields.favourite-class_option.Nordic Cardio"},{"value":"Nordic Balance","displayValue":"update_fields.favourite-class_option.Nordic Balance"}]},"gender":{"type":"select","group":"metafields","handle":"gender","title":"","required":false,"placeholder":"Gender","validation":"","label_translation":"update_fields.gender","placeholder_translation":"update_fields.gender_placeholder","options":[{"value":"Male","displayValue":"update_fields.gender_option.Male"},{"value":"Female","displayValue":"update_fields.gender_option.Female"},{"value":"Other","displayValue":"update_fields.gender_option.Other"}]},"height":{"type":"text","group":"metafields","handle":"height","title":"","required":false,"placeholder":"Height","validation":"","label_translation":"update_fields.height","placeholder_translation":"update_fields.height_placeholder"},"times-per-week":{"type":"text","group":"metafields","handle":"times-per-week","title":"","required":false,"placeholder":"How many times per week do you workout?","validation":"","label_translation":"update_fields.times-per-week","placeholder_translation":"update_fields.times-per-week_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();