window.Codex = function() { let overrides = JSON.parse(localStorage.getItem('codex-overrides')) || {} let init = function() { if(!window.codex) { window.codex = { api: 'https://sala-migration.codexfit.com', translations: 'https://sala-migration.codexfit.com/api/v1/customer/translations', stripe_key: 'pk_test_QB7qVqK9djYaDXMor4dQYsuZ', timezone: 'Pacific/Auckland', components: {}, stageIds: ['codex-app'], locale: 'en-NZ', currency: 'NZD', currencyDecimals: 2, app_id: 'sala-migration', delimiters: ['{{','}}'], routerConfig: { mode: 'hash' }, scriptUrl: 'https://codexfit-api-assets.s3.amazonaws.com/production/latest/main.js', styleUrl: 'https://api-v3.codexfit.com/styles/all.css', 'auto_configure': { modals: { 'codex-cart': { modalProps: { 'v-slot': '{open, close}', 'x-position': 'right', 'y-position': 'bottom', }, props: { 'v-on:updated': 'open', 'v-on:open': 'open', 'v-on:close': 'close', } }, 'codex-login': { modalProps: { 'v-slot': '{close}', ':delay-close': 3000, }, props: { 'v-on:close': 'close' } }, 'codex-register': { modalProps: { 'v-slot': '{close}', ':delay-close': 3000, }, props: { 'v-on:close': 'close' } }, 'codex-password-recover': { modalProps: { 'v-slot': '{close}', ':delay-close': 3000, }, props: { 'v-on:close': 'close' } }, 'codex-password-reset': { modalProps: { 'v-slot': '{close}', ':delay-close': 3000, }, props: { 'v-on:close': 'close' } }, 'codex-verify-sms': { modalProps: { 'v-slot': '{close}', ':delay-close': 3000, ':show-close-button': false }, props: { 'v-on:close': 'close' } }, 'codex-waitlist-confirmation': { modalProps: { 'v-slot': '{close, open}', ':delay-close': 3000 }, props: { 'v-on:close': 'close', 'v-on:open': 'open' } }, 'codex-survey': { modalProps: { 'v-slot': '{close}', }, props: { 'v-on:close': 'close', } } } }, registration_fields: {"first_name":{"type":"text","group":"","handle":"first_name","title":"","required":true,"placeholder":"First Name","validation":"","label_translation":"register_fields.first_name","placeholder_translation":"register_fields.first_name_placeholder","columnspan":"1"},"last_name":{"type":"text","group":"","handle":"last_name","title":"","required":true,"placeholder":"Last Name","validation":"","label_translation":"register_fields.last_name","placeholder_translation":"register_fields.last_name_placeholder","columnspan":"1"},"email":{"type":"email","group":"","handle":"email","title":"","required":true,"placeholder":"Email","validation":"","label_translation":"register_fields.email","placeholder_translation":"register_fields.email_placeholder","columnspan":"1"},"password":{"type":"password","group":"","handle":"password","title":"","required":true,"placeholder":"Password","validation":"","label_translation":"register_fields.password","placeholder_translation":"register_fields.password_placeholder","columnspan":"1"},"password_confirmation":{"type":"password","group":"","handle":"password_confirmation","title":"","required":true,"placeholder":"Confirm password Placeholder","validation":"","label_translation":"register_fields.password_confirmation","placeholder_translation":"register_fields.password_confirmation_placeholder","columnspan":"1"},"dob":{"type":"date","group":"","handle":"dob","title":"","required":true,"placeholder":"","validation":"","label_translation":"register_fields.dob","placeholder_translation":"register_fields.dob_placeholder","columnspan":"1"},"telephone":{"type":"telephone","group":"","handle":"telephone","title":"","required":true,"placeholder":"Mobile number","validation":"","label_translation":"register_fields.telephone","placeholder_translation":"register_fields.telephone_placeholder","columnspan":"1"},"opt_in_email":{"type":"checkbox","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,"columnspan":"1"},"opt_in_sms":{"type":"checkbox","group":"opt_ins","handle":"opt_in_sms","title":"","required":false,"placeholder":"","validation":"","label_translation":"register_fields.opt_in_sms","placeholder_translation":"register_fields.opt_in_sms_placeholder","default":false,"inverted":false,"columnspan":"1"}}, registration_fields_layout: 1, update_fields: {"first_name":{"type":"text","group":"","handle":"first_name","title":"","required":true,"placeholder":"First Name","validation":"","label_translation":"update_fields.first_name","placeholder_translation":"update_fields.first_name_placeholder","columnspan":"2"},"last_name":{"type":"text","group":"","handle":"last_name","title":"","required":true,"placeholder":"Last Name","validation":"","label_translation":"update_fields.last_name","placeholder_translation":"update_fields.last_name_placeholder","columnspan":"2"},"email":{"type":"email","group":"","handle":"email","title":"","required":true,"placeholder":"Email","validation":"","label_translation":"update_fields.email","placeholder_translation":"update_fields.email_placeholder","columnspan":"2"},"username":{"type":"text","group":"","handle":"username","title":"","required":false,"placeholder":"Username","validation":"","label_translation":"update_fields.username","placeholder_translation":"update_fields.username_placeholder","columnspan":"2"},"dob":{"type":"date","group":"","handle":"dob","title":"","required":true,"placeholder":"","validation":"","label_translation":"update_fields.dob","placeholder_translation":"update_fields.dob_placeholder","columnspan":"2"},"password":{"type":"password","group":"","handle":"password","title":"","required":true,"placeholder":"Password","validation":"","label_translation":"update_fields.password","placeholder_translation":"update_fields.password_placeholder","columnspan":"2"},"password_confirmation":{"type":"password","group":"","handle":"password_confirmation","title":"","required":true,"placeholder":"Confirm password Placeholder","validation":"","label_translation":"update_fields.password_confirmation","placeholder_translation":"update_fields.password_confirmation_placeholder","columnspan":"2"},"telephone":{"type":"telephone","group":"","handle":"telephone","title":"","required":true,"placeholder":"Mobile number","validation":"","label_translation":"update_fields.telephone","placeholder_translation":"update_fields.telephone_placeholder","columnspan":"2"},"opt_in_email":{"type":"checkbox","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,"columnspan":"2"},"opt_in_sms":{"type":"checkbox","group":"opt_ins","handle":"opt_in_sms","title":"","required":false,"placeholder":"","validation":"","label_translation":"update_fields.opt_in_sms","placeholder_translation":"update_fields.opt_in_sms_placeholder","default":false,"inverted":false,"columnspan":"2"}}, update_fields_layout: 1, urls: {"buy_url":"https:\/\/powerful-point-682957.framer.app\/buy","video_url":"https:\/\/powerful-point-682957.framer.app\/video","videos_url":"https:\/\/powerful-point-682957.framer.app\/class-finder","account_url":"https:\/\/powerful-point-682957.framer.app\/account","booking_url":"https:\/\/powerful-point-682957.framer.app\/book","website_url":"https:\/\/powerful-point-682957.framer.app\/","instructor_url":"https:\/\/powerful-point-682957.framer.app\/instructor","instructors_url":"https:\/\/powerful-point-682957.framer.app\/instructors","video_collection_url":"https:\/\/powerful-point-682957.framer.app\/collection","video_collection_listing_url":"https:\/\/powerful-point-682957.framer.app\/series"} } 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) { loadScript = function() { let cs = document.createElement("script") cs.type = window.codex.scriptType ?? "text/javascript" cs.src = window.codex.scriptUrl cs.module = 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(document.readyState === "complete") { loadScript() } else { document.addEventListener("DOMContentLoaded", loadScript) } } 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) { // Create a single container for all modals const modalContainer = document.createElement("div") modalContainer.id = "codex-modal-container" modalContainer.dataset.codex = "" // Create modals within the single container Object.entries(window.codex.auto_configure.modals).forEach(([component, attrs]) => { const modal = document.createElement("codex-modal") modal.setAttribute('modal-name', component) Object.entries(attrs.modalProps ?? {}).forEach(([key, value]) => { modal.setAttribute(key, value) }) const vueComponent = document.createElement(component) Object.entries(attrs.props ?? {}).forEach(([key, value]) => { vueComponent.setAttribute(key, value) }) modal.appendChild(vueComponent) modalContainer.appendChild(modal) }) // Append the single container to body instead of head document.body.appendChild(modalContainer) 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();