(function() { class SPZCustomProductValidate extends SPZ.BaseElement { constructor(element) { super(element); this.action_ = SPZServices.actionServiceForDoc(this.element); this.isFirstQuickShop = true; // 刚打开 quick shop 不弹提示 } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.setupAction_(); } setupAction_() { this.registerAction('handleProductDetailError', (invocation) => { this.handleProductDetailError_(invocation); }); this.registerAction('handleQuickShopError', (invocation) => { this.handleQuickShopError_(invocation); }); this.registerAction('resetFirstQuickShop', () => { this.resetFirstQuickShop_(); }); } handleProductDetailError_(invocation) { const tipText = this.transformToastTips_(invocation.args.content); const container = document.getElementById('product-info-body'); this.waitForElement_('.product-info__variants-tips', container) .then(element => { element.scrollIntoView({ block: 'center' }); this.trigger_('error', tipText); }) .catch((error) => { this.trigger_('error', tipText); console.warn(error); }); } handleQuickShopError_(invocation){ if(this.isFirstQuickShop) { this.isFirstQuickShop = false; return; } const tipText = this.transformToastTips_(invocation.args.content); this.trigger_('error', tipText); } resetFirstQuickShop_() { this.isFirstQuickShop = true; } waitForElement_(selector, container = document.body, timeout = 3000) { return new Promise((resolve, reject) => { // 首先检查元素是否已经存在 const element = container.querySelector(selector); if (element) { return resolve(element); } // 设置超时 const timeoutId = setTimeout(() => { observer.disconnect(); reject(new Error(`等待元素 ${selector} 超时`)); }, timeout); // 创建观察器 const observer = new MutationObserver((mutations, obs) => { const element = container.querySelector(selector); if (element) { clearTimeout(timeoutId); obs.disconnect(); resolve(element); } }); // 开始观察指定容器 observer.observe(container, { childList: true, subtree: true }); }); } transformToastTips_(data) { let result = ''; data.split(',').forEach(item => { result += "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, item); }); return result; } trigger_(name, data) { const event = SPZUtils.Event.create(this.win, 'spz-custom-product-validate.${name}', { data }); this.action_.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-product-validate', SPZCustomProductValidate); }())
${(function(){ const get_random_six_digits = () => { return Math.random().toString().slice(-6) }; const wholesale_enabled = false; const setting_product_image_display = "133.33%"; const product_image = data.image; const secondary_image = data.secondImage; const image_width = product_image.width; let image_height = product_image.height; if(setting_product_image_display == '100%'){ image_height = image_width }else if(setting_product_image_display == '133.33%'){ image_height = image_width * 1.3333; }; const product_image_hover_on = true && !!secondary_image.src; const has_save_label = true && ((+data.compare_at_price) > (+data.price)); const is_single_variant = data.variants.length == 1; const min_price_variant_href = (data.min_price_variant && data.min_price_variant.available) ? data.min_price_variant.withinUrl : data.withinUrl; const retail_price_max = data.retail_price_max || data.compare_at_price_max; const THUMBNAILS_MAX_SIZE = 3; const thumbnails = data.thumbVariants.slice(0, THUMBNAILS_MAX_SIZE); const image_wrap_id = 'image_wrap_' + get_random_six_digits(); const image_carousel_id = 'image_carousel_' + get_random_six_digits(); const thumbnails_selector_id = 'thumbnails_selector_' + get_random_six_digits(); const form_id = 'form_' + get_random_six_digits(); const mixed_wholesale = data.mixed_wholesale; return `
${ data.available ? `${ (+data.compare_at_price > +data.price) ? `Save
` : '' }` : "Sold out" }
Mixed Lot
${data.title}
${ data.price_min != data.price_max ? `from
` : `
` }
+${data.remainInvisibleThumbCount}
` })()}
Search
Log in
Create an account
${data.data && data.data.count}
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
Shop By Heel Style
Kitten Heels
Stiletto Heels
Chunky Heels
Shop By Collection
Mary Jane Shoes
Green & Silver Ankle Strap Heels Square Toe Rhinestone Sandals
$125.00
BOOTS
Shaft Height
Ankle Boots
Knee High Boots
Over-The-Knee Boots
Shop By Collection
Cowgirl Boots
Turquoise Distressed Snip Toe Fringe Studded Wide Calf Cowgirl Boots
$179.00
SANDALS
MULES
FLATS
More links
${(function(){ var linkList =[false,false,false,true,true,false,false,false].slice(offset); var hasChild = linkList.some(v => v); if(!hasChild){ return `
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
BOOTS
SANDALS
MULES
FLATS
` } return `
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
BOOTS
SANDALS
MULES
FLATS
Shop By Heel Style
Kitten Heels
Stiletto Heels
Chunky Heels
Shop By Collection
Mary Jane Shoes
Shaft Height
Ankle Boots
Knee High Boots
Over-The-Knee Boots
Shop By Collection
Cowgirl Boots
` })()}
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
Shop By Heel Style
Kitten Heels
Stiletto Heels
Chunky Heels
Shop By Collection
Mary Jane Shoes
Green & Silver Ankle Strap Heels Square Toe Rhinestone Sandals
$125.00
BOOTS
Shaft Height
Ankle Boots
Knee High Boots
Over-The-Knee Boots
Shop By Collection
Cowgirl Boots
Turquoise Distressed Snip Toe Fringe Studded Wide Calf Cowgirl Boots
$179.00
SANDALS
MULES
FLATS
More links
${(function(){ var linkList =[false,false,false,true,true,false,false,false].slice(offset); var hasChild = linkList.some(v => v); if(!hasChild){ return `
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
BOOTS
SANDALS
MULES
FLATS
` } return `
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
BOOTS
SANDALS
MULES
FLATS
Shop By Heel Style
Kitten Heels
Stiletto Heels
Chunky Heels
Shop By Collection
Mary Jane Shoes
Shaft Height
Ankle Boots
Knee High Boots
Over-The-Knee Boots
Shop By Collection
Cowgirl Boots
` })()}
Log in
Create an account
${data.data && data.data.count}
Search
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
Shop By Heel Style
Shop By Collection
BOOTS
Shaft Height
Shop By Collection
SANDALS
MULES
FLATS
${(function(){ if (data === undefined || typeof data !== 'string' || data == '') return '
'; const keyword = encodeURIComponent(data); return `
View more
Your search for '${data}' did not yield any results.
` })()}
${(function(){ if (data === undefined || typeof data !== 'string' || data == '') return '
'; const keyword = encodeURIComponent(data); return `
View more
Your search for '${data}' did not yield any results.
` })()}
HOME
NEW ARRIVALS
BEST SELLERS
HEELS
HEELS
Shop By Heel Style
Shop By Heel Style
Kitten Heels
Stiletto Heels
Chunky Heels
Shop By Collection
Shop By Collection
Mary Jane Shoes
BOOTS
BOOTS
Shaft Height
Shaft Height
Ankle Boots
Knee High Boots
Over-The-Knee Boots
Shop By Collection
Shop By Collection
Cowgirl Boots
SANDALS
MULES
FLATS
Log in
Create an account
(function(){ let w = window.innerWidth; function setHeaderCssVar() { const headerEle = document.getElementById('shoplaza-section-header'); if(!headerEle){ return }; document.body.style.setProperty('--window-height', `${window.innerHeight}px`); document.body.style.setProperty('--header-height', `${headerEle.clientHeight}px`); const mdScorllHideEle = headerEle.querySelector('.header__mobile .header__scroll_hide'); if (mdScorllHideEle) { document.body.style.setProperty('--header-scroll-hide-height-md', `${mdScorllHideEle.clientHeight}px`); } const pcScorllHideEle = headerEle.querySelector('.header__desktop .header__scroll_hide'); if (pcScorllHideEle) { document.body.style.setProperty('--header-scroll-hide-height-pc', `${pcScorllHideEle.clientHeight}px`); } } function handlResize() { if(w == window.innerWidth){return}; w = window.innerWidth; setHeaderCssVar(); }; function init(){ setHeaderCssVar(); window.removeEventListener('resize', window._theme_header_listener) window._theme_header_listener = handlResize; window.addEventListener('resize', window._theme_header_listener); } init(); })();
Login
Please enter your e-mail and password:
${data.errors && data.errors[0]}
Email
Email is required
Please enter a valid email.
Password
Password is required.
Password must be between 6-16 characters long.
Forgot password?
Forgot password?
Sign in
${ Object.keys((data && data.login_setting) || {}) .map(type => `
`) .join("") }
View Cart
${function(){ const productData = data.product; let product_change_event = '', mouse_over_event = ' '; mouse_out_event = ''; const product_options = productData.options.filter(Boolean) || []; for (let opt of product_options) { const nameEscape = opt.name.replace(/\/|\\|\s|\'|\"|`|\<|\>/g, '') product_change_event = product_change_event + `quick-shop-selected-variant-${opt.id}.rerender(data=event.selectedValues.${opt.name});`; mouse_out_event = mouse_out_event + `@${nameEscape}Mouseout="quick-shop-selected-variant-${opt.id}.rerender(data=event.selectData.${opt.name}, redo=true);"`; mouse_over_event = mouse_over_event + `@${nameEscape}Mouseover="quick-shop-selected-variant-${opt.id}.rerender(data=event, redo=true);"`; } const selectedVariant = productData.variants.find(v => v.available) || productData.variants[0]; const statusLan = ((selectedVariant && !selectedVariant.available) || (!selectedVariant && !productData.available)) ? "Sold out" : "Add to cart"; return `
${statusLan}
` }()}
${function(){ const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const variantData = currentSelectVariant || defaultVariant || data; const retail_price = variantData.retail_price || 0; return `
Retail
` }()}
${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const productVariant = null; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return `
` }else { const price = variantData && variantData.price; return price != undefined ? `
` : '
'; } }()}
${function() { let variantImageShowed = false; const currentProduct = data.product; return (currentProduct.options || []).map((option, index) => { const optionName = option.name || ''; const optionId = option.id || ''; const position = `option${index + 1}`; const productOptions = currentProduct.options || []; const hasSizeOption = productOptions.some(({name = ''}) => name.toLowerCase().includes('size') ); const hasNoSizeOption = productOptions.some(({name = ''}) => !name.toLowerCase().includes('size') ); if(hasSizeOption && hasNoSizeOption) { productOptions .filter(({name = ''}) => name.toLowerCase().includes('size')) .forEach(({name}) => data.selectedValues[name] = ''); } let isThumbImage = false; if (currentProduct.need_variant_image && !variantImageShowed) { const variantNames = ["color"] || []; for (let i = 0, len = variantNames.length; i < len; i++) { const name = variantNames[i].toLowerCase(); if (name === optionName.toLowerCase()) { isThumbImage = true; variantImageShowed = true; } } } const variantType = "button"; const thumbStyle = "image_with_text"; return `
${optionName}:
${option.values.map((value, idx) => { const selected = data.selectedValues[optionName] == value ? 'checked' : ''; let thumbImage = null; if (isThumbImage) { const variants = currentProduct.variants; for (let i = 0, len = variants.length; i < len; i++) { const variant = variants[i]; if (variant[position] == value && thumbImage == null) { thumbImage = variant.image; break; } } } return `
${value}
` }).join('')}
${optionName}
${option.values.map(value => { const selected = data.selectedValues[optionName] == value ? 'selected' : ''; return `
${value}
` }).join('')}
` }).join(''); }()}
${data.originData && data.originData.value || data.value}