window.customizerData = {"url":"https:\/\/customizer.theextensions.com\/storefront\/4ti9l0ea6w","script":"https:\/\/customizer.theextensions.com\/js\/product_customizer.js","settings":{"id":12,"store_id":12,"button_label":"Personalize","button_text_color":"#ffffff","button_bg_color":"#0d6efd","popup_width":"50vw","popup_height":"50vh","button_placement":"below_add_to_cart","temp_product_id":null,"text_min_size":null,"text_max_size":null,"image_max_mb":5,"image_formats":null,"created_at":"2026-03-07T21:24:56.000000Z","updated_at":"2026-03-07T21:24:56.000000Z"},"place":{"id":"below_add_to_cart","label":"Below \"Add to Cart\"","selectors":[{"selector":".add-to-cart-buttons","position":"inside"}]},"currency":{"code":null,"format":null}};
window.customizerApplicationBaseApiUrl = customizerData.url;
const addScript = async src => new Promise((resolve, reject) => {
const el = document.createElement('script');
el.src = src;
el.addEventListener('load', resolve);
el.addEventListener('error', reject);
document.body.append(el);
});
const insertPlaceHolders = () => {
let place = window.customizerData.place;
place.selectors.map((sel, index) => {
let element = document.querySelector(sel.selector);
let id = `product-customizer-placeholder-${place.id}-${index}`;
if (element && !document.getElementById(id)) {
let placeHolder = document.createElement(sel.tag ?? 'div');
placeHolder.className = place.id;
placeHolder.id = id;
placeHolder.dataset.productCustomizer = place.id;
placeHolder.innerHTML = ["
"
, "Loading..."
, "
"].join('');
if (sel.position === 'before') {
element.parentNode.insertBefore(placeHolder, element)
} else if (sel.position === 'inside') {
element.append(placeHolder);
} else if (sel.position === 'instead') {
if (element.parentNode) {
element.parentNode.replaceChild(placeHolder, element);
}
} else {
element.parentNode.insertBefore(placeHolder, element.nextSibling);
}
}
});
}
insertPlaceHolders();
setTimeout(() => {
fetch('/api/storefront/carts', {
method: "GET",
credentials: "same-origin"
})
.then(response => response.json())
.then(result => {
window.bigcommerceCartId = result.length ? result[0].id : null;
})
.catch(error => console.error(error));
function getProductId() {
const selectors = [
() => document.querySelector('.productView[data-entity-id]')?.dataset.entityId,
() => document.querySelector('.productView[data-ymm-product-id]')?.dataset.ymmProductId,
() => document.querySelector('.productView-options input[name="product_id"]')?.value,
() => window.__bc__?.productId,
];
for (const getValue of selectors) {
const value = getValue();
if (value != null && value !== '') {
const id = Number(value);
if (!Number.isNaN(id)) return id;
}
}
return null;
}
const productId = getProductId();
fetch(window.customizerApplicationBaseApiUrl + '/customizer-config/' + (productId || 0), {
method: "GET",
credentials: "same-origin"
})
.then(response => response.json())
.then(result => {
window.customizerProductData = result;
addScript(customizerData.script + "?v=1").then();
})
.catch(error => console.error(error));
}, 300)