SPU:BL2306162955
Style: Casual
Occasion:Daily
Season:Spring/Summer/Autumn
Pattern Type: Prints
Note:
1. Please allow slight 1-3cm(0.4-1.18") difference due to manual measurement and a little color variation for different display setting
2. Size doesn't fit all. please carefully check size chart and select the size based on your real size
3. If you are not sure. please choose a larger size.(1cm=0.39inch .1cich=2.54cm)
Size Chart
Size chart:
Size Chest Top Length Pants Length Waist
Here are what our customers say.
Newest
Most liked
Highest ratings
Lowest ratings
Wow you reached the bottom
Most liked
Highest ratings
Lowest ratings
${function(){ const limit = typeof data === 'number' ? data : 0; return `
Pictures/Videos (${limit || 0}/5 )
` }()}
${(function(){ const closeIcon = '
'; if (item.type === 'image') { return `
${closeIcon}
` } return `
${closeIcon}
` })()}
Submit Comments Anonymously
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = ; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload'. (data) => { this.handleFileUpload_(data.event?.detail?.data || ); }); this.registerAction('delete'. (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview'. (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit'. (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit'. (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count. file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList'. JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload". { count: this.uploadCount_. files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index. 1); this.uploadCount_--; sessionStorage.setItem('fileList'. JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete". { count: this.uploadCount_. files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_index; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_index?.url); fullScreenVideo.addEventListener('canplaythrough'. function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click'. function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = ; this.uploadCount_ = 0; sessionStorage.setItem('fileList'. JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear". { count: this.uploadCount_. files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/?&+(^=&+)=(^&*)/gi. function (str. key. value) { try { resultkey = decodeURIComponent(value); } catch (e) { resultkey = value; } }); result.preview_image = url.split('?')0; } catch (e) {}; return result; } triggerEvent_(name. data) { const event = SPZUtils.Event.create(this.win. name. data); this.action.trigger(this.element. name. event); } } SPZ.defineElement('spz-custom-file-upload'. SpzCustomFileUpload); The review would not show in product details on storefront since it does not support to.
${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) { product_change_event = product_change_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectedValues.${opt.name});`; mouse_out_event = mouse_out_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectData.${opt.name});`; mouse_over_event = mouse_over_event + `@${opt.name}Mouseover="quick-shop-selected-variant-${opt.name}.rerender(data=event);"`; } const selectedVariant = productData.variants.find(v => v.available) || productData.variants0; const statusLan = ((selectedVariant && !selectedVariant.available) || (!selectedVariant && !productData.available)) ? "Sold out" : "Add to cart"; return ` ` }()} ${function(){ const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const variantData = currentSelectVariant || defaultVariant || data; const retail_price = variantData.retail_price || 0; return ` ` }()} ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const productVariant = {"id":"582576a9-0827-4396-98ee-79282a570d4b"."product_id":"078e53e7-bf2d-4e47-91bc-ff25997382fa"."title":"Ivory-S"."weight_unit":"kg"."inventory_quantity":0."sku":"BL2306162955-Ivory-S"."barcode":""."position":1."option1":"Ivory"."option2":"S"."option3":""."note":""."image":{"src":"\/\/img.staticdj.com\/87915f69d4499ac46bbac9906b4d8441.png"."path":"87915f69d4499ac46bbac9906b4d8441.png"."width":600."height":900."alt":""."aspect_ratio":0.6666666666666666}."wholesale_price":{"price":53.67."min_quantity":1}."weight":"0.25"."compare_at_price":"0"."price":"53.67"."retail_price":"0"."available":true."url":"\/products\/chic-unicorn-graffiti-prints-two-pieces-set?variant=582576a9-0827-4396-98ee-79282a570d4b"."available_quantity":999999999."options":{"name":"Color"."value":"Ivory"}.{"name":"Size"."value":"S"}."off_ratio":0."flashsale_info":."sales":179}; 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_pricewholesaleIndex || ''; 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 position = `option${index + 1}`; let isThumbImage = false; if (currentProduct.need_variant_image && !variantImageShowed) { const variantNames = "color" || ; for (let i = 0. len = variantNames.length; i < len; i++) { const name = variantNamesi.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.selectedValuesoptionName == value ? 'checked' : ''; let thumbImage = null; if (isThumbImage) { const variants = currentProduct.variants; for (let i = 0. len = variants.length; i < len; i++) { const variant = variantsi; if (variantposition == value && thumbImage == null) { thumbImage = variant.image; break; } } } return `
${value}
` }).join('')}
${optionName}
${option.values.map(value => { const selected = data.selectedValuesoptionName == value ? 'selected' : ''; return `${value} ` }).join('')} ` }).join(''); }()}
${data.originData && data.originData.value || data.value} ${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) { product_change_event = product_change_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectedValues.${opt.name});`; mouse_out_event = mouse_out_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectData.${opt.name});`; mouse_over_event = mouse_over_event + `@${opt.name}Mouseover="quick-shop-selected-variant-${opt.name}.rerender(data=event);"`; } const selectedVariant = productData.variants.find(v => v.available) || productData.variants0; const statusLan = ((selectedVariant && !selectedVariant.available) || (!selectedVariant && !productData.available)) ? "Sold out" : "Add to cart"; return ` ` }()} ${function(){ const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const variantData = currentSelectVariant || defaultVariant || data; const retail_price = variantData.retail_price || 0; return ` ` }()} ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants0); const productVariant = {"id":"582576a9-0827-4396-98ee-79282a570d4b"."product_id":"078e53e7-bf2d-4e47-91bc-ff25997382fa"."title":"Ivory-S"."weight_unit":"kg"."inventory_quantity":0."sku":"BL2306162955-Ivory-S"."barcode":""."position":1."option1":"Ivory"."option2":"S"."option3":""."note":""."image":{"src":"\/\/img.staticdj.com\/87915f69d4499ac46bbac9906b4d8441.png"."path":"87915f69d4499ac46bbac9906b4d8441.png"."width":600."height":900."alt":""."aspect_ratio":0.6666666666666666}."wholesale_price":{"price":53.67."min_quantity":1}."weight":"0.25"."compare_at_price":"0"."price":"53.67"."retail_price":"0"."available":true."url":"\/products\/chic-unicorn-graffiti-prints-two-pieces-set?variant=582576a9-0827-4396-98ee-79282a570d4b"."available_quantity":999999999."options":{"name":"Color"."value":"Ivory"}.{"name":"Size"."value":"S"}."off_ratio":0."flashsale_info":."sales":179}; 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_pricewholesaleIndex || ''; 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 position = `option${index + 1}`; let isThumbImage = false; if (currentProduct.need_variant_image && !variantImageShowed) { const variantNames = "color" || ; for (let i = 0. len = variantNames.length; i < len; i++) { const name = variantNamesi.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.selectedValuesoptionName == value ? 'checked' : ''; let thumbImage = null; if (isThumbImage) { const variants = currentProduct.variants; for (let i = 0. len = variants.length; i < len; i++) { const variant = variantsi; if (variantposition == value && thumbImage == null) { thumbImage = variant.image; break; } } } return `
${value}
` }).join('')}
${optionName}
${option.values.map(value => { const selected = data.selectedValuesoptionName == value ? 'selected' : ''; return `${value} ` }).join('')} ` }).join(''); }()}
${data.originData && data.originData.value || data.value}
const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body. 'data-section-type="product" role="addToCart". data-section-type="product_detail" role="addToCart". data-section-type="product_detail" data-click="addToCart". data-section-type="product" data-click="addToCart"' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }. this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document. 'dj.variantChange'. (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }. 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG. SpzCustomPainterButtonAnimation);