www.uflashion.com
Open in
urlscan Pro
2606:4700::6812:e82a
Public Scan
Submitted URL: http://www.uflashion.com/
Effective URL: https://www.uflashion.com/
Submission: On March 17 via api from US — Scanned from DE
Effective URL: https://www.uflashion.com/
Submission: On March 17 via api from US — Scanned from DE
Form analysis
8 forms found in the DOM<form class="search-predictive-form" id="search-predictive-form" is="spz-form">
<input class="search-predictive-form-input border rounded-md w-full text-base" id="search-predictive-form-input" type="text" autocomplete="off" name="q" autofocus="" placeholder="Search"
@input-debounced="search-predictive-search-icon-render.rerender(data=event.value);search-predictive-result.rerender(data=event.value);">
<button class="search-predictive-form-clear clear text-0" type="button" @tap="search-predictive-search-icon-render.rerender(data='');search-predictive-form.clear();search-predictive-result.rerender(data='');"><svg class="" width="24" height="24"
fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="12" fill="#F6F6F6"></rect>
<path d="M15.813 9.093a.64.64 0 0 0-.906-.905L12 11.095 9.093 8.188a.64.64 0 0 0-.905.905L11.094 12l-2.906 2.907a.64.64 0 0 0 .905.905L12 12.906l2.907 2.906a.64.64 0 0 0 .905-.905L12.906 12l2.906-2.907Z" fill="currentColor"></path>
</svg></button>
<spz-render class="search-predictive-search-icon-container absolute top-0 left-0 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" id="search-predictive-search-icon-render"
layout="container" i-spzhtml-layout="container">
<template>
<a class="search-predictive-search-icon flex" href="/search?q=${encodeURIComponent(typeof data === 'string' ? data : '')}">
<svg class="lg:hidden" width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 .8a6.2 6.2 0 1 0 3.992 10.945l2.534 2.535a.534.534 0 0 0 .754-.755l-2.534-2.534A6.2 6.2 0 0 0 7 .8ZM1.868 7a5.133 5.133 0 1 1 10.267 0A5.133 5.133 0 0 1 1.867 7Z" fill="currentColor"></path></svg>
<svg class="md:hidden" width="20" height="20" xmlns="http://www.w3.org/2000/svg"><path d="M20 0H0v20h20V0Z" fill="#fff" fill-opacity="0"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M8.75 1a7.75 7.75 0 1 0 4.989 13.681l3.168 3.168a.667.667 0 0 0 .942-.942l-3.168-3.168A7.75 7.75 0 0 0 8.75 1ZM2.333 8.75a6.417 6.417 0 1 1 12.834 0 6.417 6.417 0 0 1-12.834 0Z" fill="currentColor"></path></svg>
</a>
</template>
</spz-render>
</form>
<form class="zb-flex zb-flex-col zb-relative zb-w-full">
<div class="zb-overflow-y-auto zb-pb-[100px]">
<div class="zb-flex zb-items-center zb-pb-4 zb-border-b zb-border-t-0 zb-border-l-0 zb-border-r-0 zb-border-solid zb-border-[#eee] md:zb-border-none"> <ljs-render layout="container"
class="zb-flex-shrink-0 zb-w-[66px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0 zb-h-[70px] md:zb-hidden" id="smart_recommend_product_image" manual="" template="smart_recommend_product_image_template"></ljs-render>
<div class="zb-w-full">
<div class="zb-line-clamp-2 zb-mb-2 zb-text-sm md:zb-text-base">${product.title}</div>
<div class="zb-flex zb-justify-between zb-items-center"> <spz-render layout="container" template="smart_recommend_price_template" id="smart_recommend_modal_price" manual="">
<div class="zb-flex zb-items-center"> <ljs-currency class="zb-font-semibold zb-text-[22px] zb-text-[#CD201A] zb-mr-2" layout="container" value="${product.min_price_variant.price}"></ljs-currency> <ljs-currency
class="zb-text-[#93989D] zb-text-xs zb-line-through" layout="container" value="${product.min_price_variant.compare_at_price}"
spz-if="${product.min_price_variant.compare_at_price > product.min_price_variant.price ? true : false}"></ljs-currency> </div>
</spz-render>
<a class="zb-flex zb-items-center zb-cursor-pointer zb-text-[#212B36] zb-no-underline" href="${product.url}?${toQuery({ aid: 'smart_recommend.' + data.show_type + '.' + data.rule_id, ifb: product.ifb || '', cfb: product.cfb || '', scm: data.scm || '', ssp: data.ssp || '' })}"> <span class="zb-text-[13px]">See detail</span> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="#93989D"></path></svg> </a>
</div>
</div>
</div> <ljs-variants id="smart_recommend_product_variants" layout="container" template="smart_recommend_product_variant_template" slide="smart_recommend_carousel" disabled-dj-event="" interference=""> </ljs-variants>
<div class="zb-text-sm zb-mb-2">Quantity</div> <ljs-quantity disabled-dj-event="" layout="fixed" width="150" height="52" min="1" max="999999" value="1" input-class="!zb-text-base" icon-class="!zb-p-3"></ljs-quantity>
</div>
<div class="zb-absolute zb-bottom-0 zb-flex md:zb-flex-col zb-w-full zb-bg-white"> <button
class="zb-flex zb-items-center zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 md:zb-mb-2 zb-justify-center zb-cursor-pointer zb-w-full zb-border zb-border-solid zb-border-[#313131] zb-bg-white zb-rounded zb-h-[42px]" role="addToCart" type="button"
@tap="smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');"> <span>Add To Cart</span> </button> <button
class="zb-flex zb-items-center zb-justify-center zb-cursor-pointer zb-w-full zb-bg-[#292929] zb-text-white zb-rounded zb-h-[42px] zb-border-none" type="button" role="buyNow"
@tap="smart_recommend_loading.showLoading;smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');"> <span>Buy Now</span> </button>
</div>
</form>
POST
<form id="footer-newsletter-form" class="footer-newsletter-form mt-3" action-xhr="/api/customers/newsletters" method="POST" custom-validation="change-interact-and-submit"
@submiterror="footer-newsletter-error.rerender(data=event);footer-newsletter-error.toggleClass(class='hidden', force=false);"
@submitsuccess="footer-subscription-popup.open;footer-newsletter-subscription-success.toggleClass(class='hidden', force=false);footer-newsletter-form.toggleClass(class='hidden', force=true);footer-newsletter-error.toggleClass(class='hidden', force=true);">
<div class="footer-newsletter-form-group flex items-center justify-between border rounded">
<div class="footer-newsletter-form-item relative flex-1">
<input class="footer-newsletter-form-input clear w-full text-base" type="text" id="footer-newsletter-email" name="email" required=""
pattern="[a-zA-Z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?"
@input-debounced="footer-newsletter-error.toggleClass(class='hidden', force=true);">
<label class="footer-newsletter-form-label absolute color-footer-text-60 text-base" for="footer-newsletter-email"> Your email </label>
</div>
<button class="footer-newsletter-submit-btn button-primary flex-shrink-0" type="submit"> Join </button>
</div>
<div class="footer-newsletter-tip flex text-sm color-footer-text-80" validation-for="footer-newsletter-email" visible-when-invalid="valueMissing" hidden="">
<svg class="flex-shrink-0" width="14" height="14" xmlns="http://www.w3.org/2000/svg">
<rect width="14" height="14" rx="7" fill="#EB391B"></rect>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2.9a.6.6 0 0 1 .6.6v4.8a.6.6 0 1 1-1.2 0V3.5a.6.6 0 0 1 .6-.6Z" fill="#fff"></path>
<path d="M7.6 10.5a.6.6 0 1 1-1.2 0 .6.6 0 0 1 1.2 0Z" fill="#fff"></path>
</svg>Please fill in this field
</div>
<div class="footer-newsletter-tip flex text-sm color-footer-text-80" validation-for="footer-newsletter-email" visible-when-invalid="patternMismatch" hidden="">
<svg class="flex-shrink-0" width="14" height="14" xmlns="http://www.w3.org/2000/svg">
<rect width="14" height="14" rx="7" fill="#EB391B"></rect>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2.9a.6.6 0 0 1 .6.6v4.8a.6.6 0 1 1-1.2 0V3.5a.6.6 0 0 1 .6-.6Z" fill="#fff"></path>
<path d="M7.6 10.5a.6.6 0 1 1-1.2 0 .6.6 0 0 1 1.2 0Z" fill="#fff"></path>
</svg>Please enter a valid email address
</div>
</form>
POST
<form id="footer-newsletter-form-md" class="footer-newsletter-form mt-3" action-xhr="/api/customers/newsletters" method="POST" custom-validation="change-interact-and-submit"
@submiterror="footer-newsletter-error-md.rerender(data=event);footer-newsletter-error-md.toggleClass(class='hidden', force=false);"
@submitsuccess="footer-subscription-popup.open;footer-newsletter-subscription-success-md.toggleClass(class='hidden', force=false);footer-newsletter-form-md.toggleClass(class='hidden', force=true);footer-newsletter-error-md.toggleClass(class='hidden', force=true);">
<div class="footer-newsletter-form-group flex items-center justify-between border rounded">
<div class="footer-newsletter-form-item relative flex-1">
<input class="footer-newsletter-form-input clear w-full text-base" type="text" id="footer-newsletter-email-md" name="email" required=""
pattern="[a-zA-Z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?"
@input-debounced="footer-newsletter-error.toggleClass(class='hidden', force=true);">
<label class="footer-newsletter-form-label absolute color-footer-text-60 text-base" for="footer-newsletter-email-md"> Your email </label>
</div>
<button class="footer-newsletter-submit-btn button-primary flex-shrink-0" type="submit"> Join </button>
</div>
<div class="footer-newsletter-tip flex text-sm color-footer-text-80" validation-for="footer-newsletter-email-md" visible-when-invalid="valueMissing" hidden="">
<svg class="flex-shrink-0" width="14" height="14" xmlns="http://www.w3.org/2000/svg">
<rect width="14" height="14" rx="7" fill="#EB391B"></rect>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2.9a.6.6 0 0 1 .6.6v4.8a.6.6 0 1 1-1.2 0V3.5a.6.6 0 0 1 .6-.6Z" fill="#fff"></path>
<path d="M7.6 10.5a.6.6 0 1 1-1.2 0 .6.6 0 0 1 1.2 0Z" fill="#fff"></path>
</svg>Please fill in this field
</div>
<div class="footer-newsletter-tip flex text-sm color-footer-text-80" validation-for="footer-newsletter-email-md" visible-when-invalid="patternMismatch" hidden="">
<svg class="flex-shrink-0" width="14" height="14" xmlns="http://www.w3.org/2000/svg">
<rect width="14" height="14" rx="7" fill="#EB391B"></rect>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 2.9a.6.6 0 0 1 .6.6v4.8a.6.6 0 1 1-1.2 0V3.5a.6.6 0 0 1 .6-.6Z" fill="#fff"></path>
<path d="M7.6 10.5a.6.6 0 1 1-1.2 0 .6.6 0 0 1 1.2 0Z" fill="#fff"></path>
</svg>Please enter a valid email address
</div>
</form>
POST
<form id="cart-note-form" class="hidden w-full mt-5" method="POST" action-xhr="/api/cart/note" items="cart">
<textarea class="cart-note-textarea w-full rounded-md border" id="cart-note-textarea" name="note" rows="4" @input-debounced="cart-note-form-md.insert(name='note', value=event.value);cart-note-form.insert(name='note', value=event.value);"
@change="cart-note-form.submit(actionXhr='/api/cart/note');cart-note-render-md.rerender(data=event);cart-note-render.rerender(data=event);cart-note.toggleClass(class='hidden', force=true);cart-note-form.toggleClass(class='hidden', force=true);"
autofocus=""></textarea>
</form>
<form class="">
<div class="zb-flex">
<a href="${product.url}?${toQuery({ aid: 'smart_recommend.2.' + data.id, ifb: product.ifb || '', cfb: product.cfb || '', scm: product.scm || data.scm || '', ssp: data.ssp || '' })}" impr="1" imprevt="1" class="zb-w-[132px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0" data-prdct="${product.id}" data-ifb="${product.ifb || ''}" data-cfb="${product.cfb || ''}" data-scm="${product.scm || data.scm || ''}" data-spm="${productIndex}"> <ljs-render layout="container" id="smart_cart_pop_image_${product.id}" template="smart_cart_pop_image_template" manual=""></ljs-render> </a>
<div class="zb-flex zb-flex-col zb-flex-grow zb-justify-between">
<div>
<div class="zb-line-clamp-2 zb-text-sm zb-mb-2">${product.title}</div> <ljs-render layout="container" id="smart_cart_pop_price_${product.id}" template="smart_cart_pop_price_template" manual=""></ljs-render>
</div>
<div>
<div class="zb-relative zb-w-full zb-cursor-pointer">
<div class="zb-border zb-border-solid zb-border-[#eee] zb-px-3 zb-py-[10px] zb-flex zb-items-center zb-justify-between zb-font-semibold zb-text-sm zb-rounded-sm"
@tap="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);smart_cart_pop_variant_${product.id}_mobile.toggleClass(class=zb-hidden);smart_cart_pop_variant_${product.id}_pc.toggleClass(class=smart_cart_pop_variant_pc_show,force=true);smart_cart_pop_variant_modal_${product.id}.open"
spz-if="${!!(product.options && product.options.length && product.options.length > 0) && data.config.variant_select_visible}"> <ljs-render manual="" layout="container" id="smart_cart_pop_variant_text_${product.id}"
template="smart_cart_pop_variant_text_template"></ljs-render> <svg id="smart_pop_variant-select-${product.id}" width="12" height="8" class="zb-ml-2" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M6.00002 7.06738C6.19244 7.06775 6.38498 6.99453 6.5318 6.84772C6.54504 6.83447 6.55769 6.82086 6.56973 6.8069L11.1251 2.25152C11.418 1.95863 11.418 1.48375 11.1251 1.19086C10.8322 0.897968 10.3573 0.897968 10.0645 1.19086L6.00003 5.25529L1.9356 1.19086C1.64271 0.897968 1.16784 0.897968 0.874943 1.19086C0.58205 1.48375 0.58205 1.95863 0.874943 2.25152L5.43033 6.8069C5.44237 6.82086 5.45502 6.83447 5.46826 6.84772C5.61507 6.99453 5.8076 7.06775 6.00002 7.06738Z"
fill="#0A1533"></path>
</svg> </div> <ljs-lightbox layout="nodisplay" disable-unmount="" class="smart_cart_pop_lightbox_pc" id="smart_cart_pop_variant_modal_${product.id}" @close="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);">
<div id="smart_cart_pop_variant_${product.id}_pc" class="zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template"
onclick="event.stopPropagation()" disabled-dj-event="" interference=""> </ljs-variants></div>
</ljs-lightbox>
</div>
<div class="zb-mt-3"> <button product-id="${product.id}" id="smart_cart_pop_atc_btn_${product.id}"
class="zb-flex zb-items-center zb-justify-center zb-w-full zb-text-white zb-py-[10px] zb-h-9 zb-text-xs zb-font-normal zb-border-none zb-rounded-[4px] smart_cart_pop_atc_btn_bg" type="button" role="addToCart"
@tap="smart_cart_pop_loading_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_btn_${product.id}.toggleClass(class=zb-pointer-events-none);custom-func.addATCHook(activity_id='${data.id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${product.scm || data.scm}',ssp='${data.ssp}',spm='${data.spmBase}.${productIndex}')">
<ljs-render layout="container" id="smart_cart_pop_atc_${product.id}" template="smart_cart_pop_atc_template" mamual="" class="notranslate"> </ljs-render>
<div id="smart_cart_pop_added_${product.id}" class="zb-hidden"><span class="zb-flex zb-justify-center zb-gap-1"><svg width="14" height="15" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8 16.5006C3.58171 16.5006 0 12.9183 0 8.5C0 4.08171 3.58171 0.5 8 0.5C12.4183 0.5 16 4.08171 16 8.5C16 12.9183 12.4183 16.5006 8 16.5006ZM8 2.04344C4.21314 2.04344 1.54287 4.71371 1.54287 8.50057C1.54287 12.2874 4.21314 14.9577 8 14.9577C11.7869 14.9577 14.4571 12.2874 14.4571 8.50057C14.4571 4.71371 11.7869 2.04344 8 2.04344ZM7.26057 11.1909L7.12229 11.3286L7.09543 11.3017C7.02286 11.336 6.94286 11.3577 6.85714 11.3577C6.73543 11.3577 6.62857 11.3109 6.536 11.2463L6.52229 11.2594L6.45371 11.1909C6.45314 11.1903 6.45314 11.1903 6.45257 11.1897L4.09771 8.83486L4.90629 8.02686L6.85714 9.97771L11.1629 5.67143L11.9714 6.48L7.26171 11.1897C7.26114 11.1903 7.26114 11.1903 7.26057 11.1909Z"
fill="white"></path>
</svg>Added</span></div>
<div id="smart_cart_pop_loading_${product.id}" class="zb-hidden">
<div class="smart_cart_pop_loading"></div>
</div>
</button> </div>
</div>
</div>
</div>
<div id="smart_cart_pop_variant_${product.id}_mobile" class="zb-hidden md:zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template" onclick="event.stopPropagation()"
disabled-dj-event="" interference=""> </ljs-variants></div>
</form>
<form class="animated modal__form-style_template_rebate_multi layers-4" id="modal__form"
style="image: url(https://cdn.shoplazza.com/7c5e7799526c3d7f15721d8dd93d4d78.jpg); background: url(https://cdn.shoplazza.com/7c5e7799526c3d7f15721d8dd93d4d78.jpg) no-repeat scroll center center/cover; background1: #ff704f; background2: #ff274b; backgroundImageTemplate: linear-gradient(180deg, $bg1, $bg2, $bg2); ; width: 620px;">
<div class="modal__title">
<p><span style="font-size: 32px; font-weight: 900; font-family: Lato, Lato-Black; color: #fefffe;">SALE OFFER</span></p>
</div>
<div class="modal__discount-layers layers-4" style="width: 500px;">
<div class="modal__discount-layer layer-0">
<div class="discount-layer__content d-flex flex-column justify-content-center align-items-center" style="transform: scale(1); width: 106px; height: 80px;">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">20</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">2nd <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<div class="discount-layer__content_hidden d-flex flex-column justify-content-center align-items-center">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">20</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">2nd <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<svg class="modal__discount-bg" width="166" height="104" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<filter x="-8.7%" y="-12.5%" width="117.3%" height="129.5%" filterUnits="objectBoundingBox" id="a">
<feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 0 0 0 0 0 0.0980392157 0 0 0 0.5 0" in="shadowBlurOuter1"></feColorMatrix>
</filter>
<path d="M150 0v8a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6H0v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6A5 5 0 000 8V0h150z" id="b"></path>
</defs>
<g fill="none" fill-rule="evenodd">
<g transform="translate(8 6)">
<use fill="#FFFBF2" xlink:href="#b"></use>
</g>
<path stroke="#AE6002" opacity=".196" stroke-dasharray="2.6" d="M142.5 12v76m-120-76v76"></path>
</g>
</svg>
</div>
<div class="modal__discount-layer layer-1">
<div class="discount-layer__content d-flex flex-column justify-content-center align-items-center" style="transform: scale(1); width: 106px; height: 80px;">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">30</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">3rd <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<div class="discount-layer__content_hidden d-flex flex-column justify-content-center align-items-center">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">30</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">3rd <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<svg class="modal__discount-bg" width="166" height="104" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<filter x="-8.7%" y="-12.5%" width="117.3%" height="129.5%" filterUnits="objectBoundingBox" id="a">
<feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 0 0 0 0 0 0.0980392157 0 0 0 0.5 0" in="shadowBlurOuter1"></feColorMatrix>
</filter>
<path d="M150 0v8a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6H0v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6A5 5 0 000 8V0h150z" id="b"></path>
</defs>
<g fill="none" fill-rule="evenodd">
<g transform="translate(8 6)">
<use fill="#FFFBF2" xlink:href="#b"></use>
</g>
<path stroke="#AE6002" opacity=".196" stroke-dasharray="2.6" d="M142.5 12v76m-120-76v76"></path>
</g>
</svg>
</div>
<div class="modal__discount-layer layer-2">
<div class="discount-layer__content d-flex flex-column justify-content-center align-items-center" style="transform: scale(1); width: 106px; height: 80px;">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">40</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">4th <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<div class="discount-layer__content_hidden d-flex flex-column justify-content-center align-items-center">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">40</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">4th <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<svg class="modal__discount-bg" width="166" height="104" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<filter x="-8.7%" y="-12.5%" width="117.3%" height="129.5%" filterUnits="objectBoundingBox" id="a">
<feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 0 0 0 0 0 0.0980392157 0 0 0 0.5 0" in="shadowBlurOuter1"></feColorMatrix>
</filter>
<path d="M150 0v8a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6H0v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6A5 5 0 000 8V0h150z" id="b"></path>
</defs>
<g fill="none" fill-rule="evenodd">
<g transform="translate(8 6)">
<use fill="#FFFBF2" xlink:href="#b"></use>
</g>
<path stroke="#AE6002" opacity=".196" stroke-dasharray="2.6" d="M142.5 12v76m-120-76v76"></path>
</g>
</svg>
</div>
<div class="modal__discount-layer layer-3">
<div class="discount-layer__content d-flex flex-column justify-content-center align-items-center" style="transform: scale(1); width: 106px; height: 80px;">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">100</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">5th <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<div class="discount-layer__content_hidden d-flex flex-column justify-content-center align-items-center">
<div style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;" data-mce-style="color:#ff2f4b;font-family: Lato, Lato-Regular;white-space: nowrap;">
<div style="display: flex;justify-content: center;" data-mce-style="display: flex;justify-content: center;">
<span style="font-size: 44px; color: #ff2f4b;" data-mce-style="display: block;font-size: 44px; color: inherit;">100</span>
<div style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;" data-mce-style="margin-left: 5px;display: flex;flex-direction: column;justify-content: center;">
<span style="font-size: 26px;display: block;" data-mce-style="display: block;font-size: 26px; color: #ff2f4b;">%</span>
<span style="color:#ff2f4b;font-size: 12px;" data-mce-style="color:#ff2f4b;font-size: 12px;">OFF</span>
</div>
</div>
<div style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;" data-mce-style="margin-top: 5px;color: #AE6002;font-size: 12px;opacity: 0.3;">FOR THE</div>
<div style="margin-top: 5px;font-size: 14px; color: #AE6002;" data-mce-style="margin-top: 5px;font-size: 14px; color: #AE6002;">5th <span style="color: #AE6002;" data-mce-style="color: #AE6002;">ITEM</span></div>
</div>
</div>
<svg class="modal__discount-bg" width="166" height="104" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<filter x="-8.7%" y="-12.5%" width="117.3%" height="129.5%" filterUnits="objectBoundingBox" id="a">
<feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 0 0 0 0 0 0.0980392157 0 0 0 0.5 0" in="shadowBlurOuter1"></feColorMatrix>
</filter>
<path d="M150 0v8a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6a5 5 0 100 10v6H0v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6a5 5 0 000-10v-6A5 5 0 000 8V0h150z" id="b"></path>
</defs>
<g fill="none" fill-rule="evenodd">
<g transform="translate(8 6)">
<use fill="#FFFBF2" xlink:href="#b"></use>
</g>
<path stroke="#AE6002" opacity=".196" stroke-dasharray="2.6" d="M142.5 12v76m-120-76v76"></path>
</g>
</svg>
</div>
</div>
<div class="modal__button" style="background-color: #fff3be; border-color: #fff3be; "><span style="color: #FF0022; font-size: 16px; font-weight: bold;font-family: Lato, Lato-Regular;"
data-mce-style="color: #FF0022; font-size: 16px; font-weight: bold;font-family: Lato, Lato-Regular;">COLLECT ALL</span></div>
<div class="modal__close-icon d-block d-md-none notranslate">
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg">
<g fill="#FFF" fill-rule="nonzero">
<path d="M15 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-8.284 0-15-6.716-15-15C0 6.716 6.716 0 15 0zm0 2C7.82 2 2 7.82 2 15s5.82 13 13 13 13-5.82 13-13S22.18 2 15 2z"></path>
<path
d="M19.905 9.505a.7.7 0 01.073.903l-.073.087-4.211 4.209 4.21 4.21a.7.7 0 01-.903 1.064l-.086-.073-4.211-4.211-4.209 4.21a.7.7 0 01-1.064-.903l.074-.086 4.21-4.211-4.21-4.209a.7.7 0 01.903-1.064l.087.074 4.209 4.21 4.21-4.21a.7.7 0 01.99 0z">
</path>
</g>
</svg>
</div>
<svg class="modal__close-icon d-md-block d-none" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200">
<defs>
<style></style>
</defs>
<path d="M238.36 863.697L863.696 238.36a46.545 46.545 0 00-65.815-65.815L172.544 797.882a46.545 46.545 0 1065.815 65.815zM172.543 238.36l625.338 625.338a46.545 46.545 0 0065.815-65.815L238.36 172.544a46.545 46.545 0 10-65.815 65.815z"
fill="#ffffff"></path>
</svg>
<div class="modal__footer">
<span style="font-size: 14px; color: #ffffff;font-family: Lato, Lato-Regular;" data-mce-style="font-size: 14px; color: #ffffff;font-family: Lato, Lato-Regular;">*Discounts would automatically apply when placing an order</span>
</div>
</form>
POST //translate.googleapis.com/translate_voting?client=te
<form id="goog-gt-votingForm" action="//translate.googleapis.com/translate_voting?client=te" method="post" target="votingFrame" class="VIpgJd-yAWNEb-hvhgNd-aXYTce"><input type="text" name="sl" id="goog-gt-votingInputSrcLang"><input type="text"
name="tl" id="goog-gt-votingInputTrgLang"><input type="text" name="query" id="goog-gt-votingInputSrcText"><input type="text" name="gtrans" id="goog-gt-votingInputTrgText"><input type="text" name="vote" id="goog-gt-votingInputVote"></form>
Text Content
See all offers * Free Shipping Over $69 Free Shipping Over $69 Shop now Free Shipping Over $69 Shop now Free Shipping Over $69 Shop now * Home * HOT SALE * New Arrival * Farm * Animal * Dog * Cat * Cow * Horse * Farm * Bee * Fox * Chicken * Birds * Rabbit * More links * 🔥Cotton * 🔥Japanese Art * W's Art * M's Art * Men * M's west * M's Art * Viking * Ocean * Dress * Bottom * Set * Accessories * Sweater * Plant * Tribe * West * Sport Powered by Google Übersetzer English,한국어,日本語,Português,العربية,Русский,Español,繁體中文,Français,ไทย,Italiano,Deutsch,Polski,Nederlands,Bahasa Melayu,svenska,norsk,čeština,Lietuvis,Latvietis,Suomalainen,Ελληνικά,Eestlane,dansk,Magyar EUR * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Afghan Afghani (AFN) * Albanian Lek (ALL) * Algerian Dinar (DZD) * Angolan Kwanza (AOA) * Argentine Pesos (ARS) * Armenian Dram (AMD) * Aruban Florin (AWG) * Australian Dollars (AUD) * Barbadian Dollar (BBD) * Azerbaijani Manat (AZN) * Bangladesh Taka (BDT) * Bahamian Dollar (BSD) * Bahraini Dinar (BHD) * Belarusian Ruble (BYN) * Belize Dollar (BZD) * Bhutanese Ngultrum (BTN) * Bosnia and Herzegovina Convertible Mark (BAM) * Brazilian Real (BRL) * Bolivian Boliviano (BOB) * Botswana Pula (BWP) * Brunei Dollar (BND) * Bulgarian Lev (BGN) * Burmese Kyat (MMK) * Cambodian Riel (KHR) * Cape Verdean escudo (CVE) * Cayman Dollars (KYD) * Central African CFA Franc (XAF) * Chilean Peso (CLP) * Colombian Peso (COP) * Comorian Franc (KMF) * Congolese franc (CDF) * Costa Rican Colones (CRC) * Croatian Kuna (HRK) * Czech Koruny (CZK) * Danish Kroner (DKK) * Dominican Peso (DOP) * East Caribbean Dollar (XCD) * Egyptian Pound (EGP) * Ethiopian Birr (ETB) * CFP Franc (XPF) * Fijian Dollars (FJD) * Gambian Dalasi (GMD) * Ghanaian Cedi (GHS) * Guatemalan Quetzal (GTQ) * Guyanese Dollar (GYD) * Georgian Lari (GEL) * Haitian Gourde (HTG) * Honduran Lempira (HNL) * Hong Kong Dollars (HKD) * Hungarian Forint (HUF) * Icelandic Kronur (ISK) * Indian Rupees (INR) * Indonesian Rupiah (IDR) * Israeli New Shekel (NIS) * Jamaican Dollars (JMD) * Japanese Yen (JPY) * Jersey Pound (JEP) * Jordanian Dinar (JOD) * Kazakhstani Tenge (KZT) * Kenyan Shilling (KES) * Kuwaiti Dinar (KWD) * Kyrgyzstani Som (KGS) * Laotian Kip (LAK) * Latvian Lati (LVL) * Lebanese Pounds (LBP) * Lesotho Loti (LSL) * Liberian Dollar (LRD) * Malagasy Ariary (MGA) * Macedonia Denar (MKD) * Macanese Pataca (MOP) * Malawian Kwacha (MWK) * Maldivian Rufiyaa (MVR) * Mexican Pesos (MXN) * Malaysian Ringgits (MYR) * Mauritian Rupee (MUR) * Moldovan Leu (MDL) * Moroccan Dirham (MAD) * Mongolian Tugrik (MNT) * Mozambican Metical (MZN) * Namibian Dollar (NAD) * Nepalese Rupee (NPR) * Netherlands Antillean Guilder (ANG) * New Zealand Dollars (NZD) * Nicaraguan Córdoba (NIO) * Nigerian Naira (NGN) * Norwegian Kroner (NOK) * Omani Rial (OMR) * Pakistani Rupee (PKR) * Papua New Guinean Kina (PGK) * Paraguayan Guarani (PYG) * Peruvian Nuevo Sol (PEN) * Philippine Peso (PHP) * Polish Zlotych (PLN) * Qatari Rial (QAR) * Romanian Lei (RON) * Russian Rubles (RUB) * Rwandan Franc (RWF) * Samoan Tala (WST) * Saudi Riyal (SAR) * Sao Tome And Principe Dobra (STD) * Serbian dinar (RSD) * Seychellois Rupee (SCR) * Singapore Dollars (SGD) * Sudanese Pound (SDG) * Syrian Pound (SYP) * South African Rand (ZAR) * South Korean Won (KRW) * South Sudanese Pound (SSP) * Solomon Islands Dollar (SBD) * Sri Lankan Rupees (LKR) * Surinamese Dollar (SRD) * Swazi Lilangeni (SZL) * Swedish Kronor (SEK) * Swiss Francs (CHF) * Taiwan Dollars (TWD) * Thai baht (THB) * Tanzanian Shilling (TZS) * Trinidad and Tobago Dollars (TTD) * Tunisian Dinar (TND) * Turkish Lira (TRY) * Turkmenistani Manat (TMT) * Ugandan Shilling (UGX) * Ukrainian Hryvnia (UAH) * United Arab Emirates Dirham (AED) * Uruguayan Pesos (UYU) * Uzbekistan som (UZS) * Vanuatu Vatu (VUV) * Venezuelan Bolivares (VEF) * Vietnamese đồng (VND) * West African CFA franc (XOF) * Yemeni Rial (YER) * Zambian Kwacha (ZMW) Sign in Create an account ${(data.data && data.data.count) > 999 ? '999+' : (data.data && data.data.count)} 0 ${(data.data && data.data.count) > 999 ? '999+' : (data.data && data.data.count)} Search * Home * HOT SALE * New Arrival * Farm * Animal Animal * Dog * Cat * Cow * Horse * Farm * Bee * Fox * Chicken * Birds * Rabbit * 🔥Cotton * 🔥Japanese Art 🔥Japanese Art * W's Art * M's Art * Men Men * M's west * M's Art * Viking * Ocean * Dress * Bottom * Set * Accessories * Sweater * Plant * Tribe * West * Sport English,한국어,日本語,Português,العربية,Русский,Español,繁體中文,Français,ไทย,Italiano,Deutsch,Polski,Nederlands,Bahasa Melayu,svenska,norsk,čeština,Lietuvis,Latvietis,Suomalainen,Ελληνικά,Eestlane,dansk,Magyar EUR * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Afghan Afghani (AFN) * Albanian Lek (ALL) * Algerian Dinar (DZD) * Angolan Kwanza (AOA) * Argentine Pesos (ARS) * Armenian Dram (AMD) * Aruban Florin (AWG) * Australian Dollars (AUD) * Barbadian Dollar (BBD) * Azerbaijani Manat (AZN) * Bangladesh Taka (BDT) * Bahamian Dollar (BSD) * Bahraini Dinar (BHD) * Belarusian Ruble (BYN) * Belize Dollar (BZD) * Bhutanese Ngultrum (BTN) * Bosnia and Herzegovina Convertible Mark (BAM) * Brazilian Real (BRL) * Bolivian Boliviano (BOB) * Botswana Pula (BWP) * Brunei Dollar (BND) * Bulgarian Lev (BGN) * Burmese Kyat (MMK) * Cambodian Riel (KHR) * Cape Verdean escudo (CVE) * Cayman Dollars (KYD) * Central African CFA Franc (XAF) * Chilean Peso (CLP) * Colombian Peso (COP) * Comorian Franc (KMF) * Congolese franc (CDF) * Costa Rican Colones (CRC) * Croatian Kuna (HRK) * Czech Koruny (CZK) * Danish Kroner (DKK) * Dominican Peso (DOP) * East Caribbean Dollar (XCD) * Egyptian Pound (EGP) * Ethiopian Birr (ETB) * CFP Franc (XPF) * Fijian Dollars (FJD) * Gambian Dalasi (GMD) * Ghanaian Cedi (GHS) * Guatemalan Quetzal (GTQ) * Guyanese Dollar (GYD) * Georgian Lari (GEL) * Haitian Gourde (HTG) * Honduran Lempira (HNL) * Hong Kong Dollars (HKD) * Hungarian Forint (HUF) * Icelandic Kronur (ISK) * Indian Rupees (INR) * Indonesian Rupiah (IDR) * Israeli New Shekel (NIS) * Jamaican Dollars (JMD) * Japanese Yen (JPY) * Jersey Pound (JEP) * Jordanian Dinar (JOD) * Kazakhstani Tenge (KZT) * Kenyan Shilling (KES) * Kuwaiti Dinar (KWD) * Kyrgyzstani Som (KGS) * Laotian Kip (LAK) * Latvian Lati (LVL) * Lebanese Pounds (LBP) * Lesotho Loti (LSL) * Liberian Dollar (LRD) * Malagasy Ariary (MGA) * Macedonia Denar (MKD) * Macanese Pataca (MOP) * Malawian Kwacha (MWK) * Maldivian Rufiyaa (MVR) * Mexican Pesos (MXN) * Malaysian Ringgits (MYR) * Mauritian Rupee (MUR) * Moldovan Leu (MDL) * Moroccan Dirham (MAD) * Mongolian Tugrik (MNT) * Mozambican Metical (MZN) * Namibian Dollar (NAD) * Nepalese Rupee (NPR) * Netherlands Antillean Guilder (ANG) * New Zealand Dollars (NZD) * Nicaraguan Córdoba (NIO) * Nigerian Naira (NGN) * Norwegian Kroner (NOK) * Omani Rial (OMR) * Pakistani Rupee (PKR) * Papua New Guinean Kina (PGK) * Paraguayan Guarani (PYG) * Peruvian Nuevo Sol (PEN) * Philippine Peso (PHP) * Polish Zlotych (PLN) * Qatari Rial (QAR) * Romanian Lei (RON) * Russian Rubles (RUB) * Rwandan Franc (RWF) * Samoan Tala (WST) * Saudi Riyal (SAR) * Sao Tome And Principe Dobra (STD) * Serbian dinar (RSD) * Seychellois Rupee (SCR) * Singapore Dollars (SGD) * Sudanese Pound (SDG) * Syrian Pound (SYP) * South African Rand (ZAR) * South Korean Won (KRW) * South Sudanese Pound (SSP) * Solomon Islands Dollar (SBD) * Sri Lankan Rupees (LKR) * Surinamese Dollar (SRD) * Swazi Lilangeni (SZL) * Swedish Kronor (SEK) * Swiss Francs (CHF) * Taiwan Dollars (TWD) * Thai baht (THB) * Tanzanian Shilling (TZS) * Trinidad and Tobago Dollars (TTD) * Tunisian Dinar (TND) * Turkish Lira (TRY) * Turkmenistani Manat (TMT) * Ugandan Shilling (UGX) * Ukrainian Hryvnia (UAH) * United Arab Emirates Dirham (AED) * Uruguayan Pesos (UYU) * Uzbekistan som (UZS) * Vanuatu Vatu (VUV) * Venezuelan Bolivares (VEF) * Vietnamese đồng (VND) * West African CFA franc (XOF) * Yemeni Rial (YER) * Zambian Kwacha (ZMW) Log in Top search terms ${function() { const force_image_size = "1.5"; const product_hover_on = true; const product_show_sale_label = true; const product_save_type = "amount"; const badge1 = "New"; const badge2 = ""; const badge3 = ""; const product_title_mobile_hide = true; const product_title_style = "hide"; const enable_collection_thumb_image = true; const variantNames = ["color"]; const thumbMaxNum = 4; const suffix_id = "search-predictive-pc" || ''; const url = data.url; const productId = data.id; const price = data.price; const productAvailable = data.available; const productVariants = data.variants || []; const images = data.images || []; const image = data.image || {}; const imageWidth = image.width; let imageHeight = image.height; let image2 = null; let imageHoverOn = false; if (force_image_size !== 'natural') { imageHeight = imageWidth * force_image_size; } if (product_hover_on) { for (let i = 1; i < images.length; i++) { const img = images[i]; if (img.src && img.src.indexOf('video=') === -1) { image2 = img; imageHoverOn = true; break; } } } let compareAtPrice = data.compare_at_price; let offRatio = data.off_ratio; let discountMaxUrl = url; const showFrom = data.price_min != data.price_max ? true : false; for (let i = 0; i < productVariants.length; i++) { const variant = productVariants[i]; if (variant.price == price && compareAtPrice < variant.compare_at_price) { compareAtPrice = variant.compare_at_price; offRatio = variant.off_ratio; variant.available && (discountMaxUrl = variant.url); } } const soldOutText = "Sold out"; let soldOn = false; let saleOn = false; if (productAvailable) { if (product_show_sale_label && price < compareAtPrice) { saleOn = true; } } else { soldOn = true; } const diffPrice = compareAtPrice - price; const saveLabelContent = product_save_type == 'percent' ? (offRatio + '%') : ``; let saveText = "Save {off_ratio}"; saveText = saveText.replace('{off_ratio}', saveLabelContent); const productTitle = data.title; const heading = "title" === 'subtitle' ? data.brief : productTitle; const variantValues = []; const showVariants = []; if (data.need_variant_image && enable_collection_thumb_image && variantNames.length > 0) { for (let i = 0; i < (data.options || []).length; i++) { const option = data.options[i]; const optionName = option.name.toLowerCase(); if (variantNames.includes(optionName)) { for (let j = 0; j < productVariants.length; j++) { const variant = productVariants[j]; const value = variant.options[i].value; if (!variantValues.includes(value)) { variantValues.push(value); showVariants.push(variant); } } break; } } } return ` ${showVariants.map(item => { return ` `; }).join('')} ${saleOn ? saveText : soldOutText} ${badge1} ${badge2} ${badge3} ${HEADING} From ${saveText} ${showVariants.map((item, idx) => { let showMoreHtml = ''; if (idx == thumbMaxNum) { showMoreHtml += ` +${showVariants.length - thumbMaxNum} `; } return ` ${showMoreHtml} `; }).join('') } `; }()} ${function() { const force_image_size = "1.5"; const product_hover_on = true; const product_show_sale_label = true; const product_save_type = "amount"; const badge1 = "New"; const badge2 = ""; const badge3 = ""; const product_title_mobile_hide = true; const product_title_style = "hide"; const enable_collection_thumb_image = true; const variantNames = ["color"]; const thumbMaxNum = 4; const suffix_id = "search-predictive-mobile" || ''; const url = data.url; const productId = data.id; const price = data.price; const productAvailable = data.available; const productVariants = data.variants || []; const images = data.images || []; const image = data.image || {}; const imageWidth = image.width; let imageHeight = image.height; let image2 = null; let imageHoverOn = false; if (force_image_size !== 'natural') { imageHeight = imageWidth * force_image_size; } if (product_hover_on) { for (let i = 1; i < images.length; i++) { const img = images[i]; if (img.src && img.src.indexOf('video=') === -1) { image2 = img; imageHoverOn = true; break; } } } let compareAtPrice = data.compare_at_price; let offRatio = data.off_ratio; let discountMaxUrl = url; const showFrom = data.price_min != data.price_max ? true : false; for (let i = 0; i < productVariants.length; i++) { const variant = productVariants[i]; if (variant.price == price && compareAtPrice < variant.compare_at_price) { compareAtPrice = variant.compare_at_price; offRatio = variant.off_ratio; variant.available && (discountMaxUrl = variant.url); } } const soldOutText = "Sold out"; let soldOn = false; let saleOn = false; if (productAvailable) { if (product_show_sale_label && price < compareAtPrice) { saleOn = true; } } else { soldOn = true; } const diffPrice = compareAtPrice - price; const saveLabelContent = product_save_type == 'percent' ? (offRatio + '%') : ``; let saveText = "Save {off_ratio}"; saveText = saveText.replace('{off_ratio}', saveLabelContent); const productTitle = data.title; const heading = "title" === 'subtitle' ? data.brief : productTitle; const variantValues = []; const showVariants = []; if (data.need_variant_image && enable_collection_thumb_image && variantNames.length > 0) { for (let i = 0; i < (data.options || []).length; i++) { const option = data.options[i]; const optionName = option.name.toLowerCase(); if (variantNames.includes(optionName)) { for (let j = 0; j < productVariants.length; j++) { const variant = productVariants[j]; const value = variant.options[i].value; if (!variantValues.includes(value)) { variantValues.push(value); showVariants.push(variant); } } break; } } } return ` ${showVariants.map(item => { return ` `; }).join('')} ${saleOn ? saveText : soldOutText} ${badge1} ${badge2} ${badge3} ${HEADING} From ${saveText} ${showVariants.map((item, idx) => { let showMoreHtml = ''; if (idx == thumbMaxNum) { showMoreHtml += ` +${showVariants.length - thumbMaxNum} `; } return ` ${showMoreHtml} `; }).join('') } `; }()} ${function() { if (data === undefined || typeof data !== 'string' || data == '') return ''; const searchEmpty = ("Your search for \"{test}\" did not yield any results.").replace('{test}', data); return ` View more ${searchEmpty} `; }()} ${Array(data.total || 0).fill().map((val, idx) => idx).map((val, idx) => ` * `).join('')} * * * ${Array(data.total || 0).fill().map((val, idx) => idx).map((val, idx) => ` * `).join('')} FIND YOUR FAVORITE FIT Easy to style, hard to take off. In a good way. VIEW MORE FARM LOVERS Uflashion is the global online store that delivers the latest Men's tactical style apparel for you! New FUNNY RUNNING SHEEPDOG WOOL FELT COZY KNIT SWEATER From €20.17 New GREETINGS FROM THE STRAY SHEEP GRAPHIC CASUAL COZY HOODIE From €17.42 +1 New EMBROIDERY WILDFLOWERS AND BEES CASUAL COZY CARDIGAN €20.17 New DAISY BEE EMBROIDERY ART PRINT CASUAL SWEATSHIRT €17.42 New BORDER COLLIE & SHEEP LANDSCAPE FELT ART COZY HOODED CARDIGAN €31.18 New FUZZY SHEEP FLEECE KNIT COZY SWEATER €21.09 New BIRDS FLORAL EMBROIDERY PATTERN COZY KNIT HOODED CARDIGAN €31.18 New DAISY BEE EMBROIDERY ART PRINT TUNIC €18.34 New VINTAGE FUZZY SHEEP FLEECE KNIT COZY SWEATER €21.09 New WOMEN'S FOX PRINT ROUND NECK CASUAL SWEATSHIRT €17.42 New FRINGED BEE CUTE HONEYBEE INSECT EMBROIDERY COMFY HOODED CARDIGAN €31.18 New CUTE BLACK SHEEP SWEATER €21.09 New FUNNY RUNNING SHEEPDOG WOOL FELT COZY KNIT SWEATER From €20.17 New GREETINGS FROM THE STRAY SHEEP GRAPHIC CASUAL COZY HOODIE From €17.42 +1 New EMBROIDERY WILDFLOWERS AND BEES CASUAL COZY CARDIGAN €20.17 New DAISY BEE EMBROIDERY ART PRINT CASUAL SWEATSHIRT €17.42 New BORDER COLLIE & SHEEP LANDSCAPE FELT ART COZY HOODED CARDIGAN €31.18 New FUZZY SHEEP FLEECE KNIT COZY SWEATER €21.09 New BIRDS FLORAL EMBROIDERY PATTERN COZY KNIT HOODED CARDIGAN €31.18 New DAISY BEE EMBROIDERY ART PRINT TUNIC €18.34 New VINTAGE FUZZY SHEEP FLEECE KNIT COZY SWEATER €21.09 New WOMEN'S FOX PRINT ROUND NECK CASUAL SWEATSHIRT €17.42 New FRINGED BEE CUTE HONEYBEE INSECT EMBROIDERY COMFY HOODED CARDIGAN €31.18 New CUTE BLACK SHEEP SWEATER €21.09 BEST SELLING * BEST SELLING New MEN'S JAPANESE TRADITIONAL INK ROOSTER SAMURAI ART PRINT SWEATSHIRT €17.42 New UPSTREAM CARP JAPANESE ART LINEN BLEND SHIRT €19.25 New INK AND PINE JAPANESE ART PRINT LINEN SHIRT €19.25 New JAPANESE ART FROG PRINT COZY COTTON LINEN SHIRT €19.25 New PLUM BLOSSOM JAPANESE ART LINEN BLEND SHIRT €19.25 New MEN'S FLORAL OTTER WATER JAPANESE ART PRINT CASUAL SWEATSHIRT €17.42 New PLUM BLOSSOM SUNRISE JAPANESE ART LINEN BLEND SHORTS €15.58 New CHERRY BLOSSOM JAPANESE LINO ART FULL ZIP HOODIE €21.09 ${function() { const force_image_size = "1.5"; const product_hover_on = true; const product_show_sale_label = true; const product_save_type = "amount"; const badge1 = "New"; const badge2 = ""; const badge3 = ""; const product_title_mobile_hide = true; const product_title_style = "hide"; const enable_collection_thumb_image = true; const variantNames = ["color"]; const thumbMaxNum = 4; const suffix_id = "-0" || ''; const url = data.url; const productId = data.id; const price = data.price; const productAvailable = data.available; const productVariants = data.variants || []; const images = data.images || []; const image = data.image || {}; const imageWidth = image.width; let imageHeight = image.height; let image2 = null; let imageHoverOn = false; if (force_image_size !== 'natural') { imageHeight = imageWidth * force_image_size; } if (product_hover_on) { for (let i = 1; i < images.length; i++) { const img = images[i]; if (img.src && img.src.indexOf('video=') === -1) { image2 = img; imageHoverOn = true; break; } } } let compareAtPrice = data.compare_at_price; let offRatio = data.off_ratio; let discountMaxUrl = url; const showFrom = data.price_min != data.price_max ? true : false; for (let i = 0; i < productVariants.length; i++) { const variant = productVariants[i]; if (variant.price == price && compareAtPrice < variant.compare_at_price) { compareAtPrice = variant.compare_at_price; offRatio = variant.off_ratio; variant.available && (discountMaxUrl = variant.url); } } const soldOutText = "Sold out"; let soldOn = false; let saleOn = false; if (productAvailable) { if (product_show_sale_label && price < compareAtPrice) { saleOn = true; } } else { soldOn = true; } const diffPrice = compareAtPrice - price; const saveLabelContent = product_save_type == 'percent' ? (offRatio + '%') : ``; let saveText = "Save {off_ratio}"; saveText = saveText.replace('{off_ratio}', saveLabelContent); const productTitle = data.title; const heading = "title" === 'subtitle' ? data.brief : productTitle; const variantValues = []; const showVariants = []; if (data.need_variant_image && enable_collection_thumb_image && variantNames.length > 0) { for (let i = 0; i < (data.options || []).length; i++) { const option = data.options[i]; const optionName = option.name.toLowerCase(); if (variantNames.includes(optionName)) { for (let j = 0; j < productVariants.length; j++) { const variant = productVariants[j]; const value = variant.options[i].value; if (!variantValues.includes(value)) { variantValues.push(value); showVariants.push(variant); } } break; } } } return ` ${showVariants.map(item => { return ` `; }).join('')} ${saleOn ? saveText : soldOutText} ${badge1} ${badge2} ${badge3} ${HEADING} From ${saveText} ${showVariants.map((item, idx) => { let showMoreHtml = ''; if (idx == thumbMaxNum) { showMoreHtml += ` +${showVariants.length - thumbMaxNum} `; } return ` ${showMoreHtml} `; }).join('') } `; }()} Load more NEW ARRIVALS With eye-catching annual flowers and foliage you won’t find anywhere else, you can mix and match our vibrant container New JAPANESE WAVES ART COZY COTTON LINEN SHIRT €19.25 New JAPANESE WAVES ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE FISH JAPANESE ART LINEN BLEND SHORTS €15.58 New VINTAGE FISH JAPANESE ART COZY COTTON LINEN SHIRT €19.25 New JAPANESE VINTAGE FISH ART LINEN BLEND CASUAL PANTS €20.17 New JAPANESE CAT ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE CAT PETTING GUIDE JAPANESE ART COZY COTTON LINEN SHIRT €19.25 New FISH VINTAGE JAPANESE ART COTTON AND LINEN SHIRT €24.76 New VINTAGE KITTEN PLAYING WITH GOLDFISH TRADITIONAL ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE WAVES OF CARP TRADITIONAL ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE FISH JAPANESE ART LINEN BLEND COMFY SHIRT €19.25 New VINTAGE FLORAL GOLDFISH JAPANESE ART COZY COTTON LINEN SHIRT €19.25 New JAPANESE WAVES ART COZY COTTON LINEN SHIRT €19.25 New JAPANESE WAVES ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE FISH JAPANESE ART LINEN BLEND SHORTS €15.58 New VINTAGE FISH JAPANESE ART COZY COTTON LINEN SHIRT €19.25 New JAPANESE VINTAGE FISH ART LINEN BLEND CASUAL PANTS €20.17 New JAPANESE CAT ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE CAT PETTING GUIDE JAPANESE ART COZY COTTON LINEN SHIRT €19.25 New FISH VINTAGE JAPANESE ART COTTON AND LINEN SHIRT €24.76 New VINTAGE KITTEN PLAYING WITH GOLDFISH TRADITIONAL ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE WAVES OF CARP TRADITIONAL ART COZY COTTON LINEN SHIRT €19.25 New VINTAGE FISH JAPANESE ART LINEN BLEND COMFY SHIRT €19.25 New VINTAGE FLORAL GOLDFISH JAPANESE ART COZY COTTON LINEN SHIRT €19.25 FREE SHIPPING Free Shipping for orders over $69 RETURNS Within 14 days for an exchange. ONLINE SUPPORT 12 hours a day, 7 days a week FLEXIBLE PAYMENT Pay with Multiple Credit Cards DRESS ${function(){ const rules = data.data.rules; return ` ` }()} ${function(){ const isCart = data.data.isCart; const isCollection = data.data.isCollection; const isProduct = data.data.isProduct; const isIndex = data.data.isIndex; return ` ${isCart ? 'The items in the shopping cart do not participate in any recommendation rule. Add the participating items to your shopping cart to check the design.' : ''} ${isProduct ? 'This product did not participated in any recommendation rule. Switch to another product to check the design.' : ''} ${isCollection ? 'The items in this collection do not participate in any recommendation rule. Switch the participating items to check the design.' : ''} ${isIndex ? 'The home page do not participate in any recommendation rule.' : ''} (This prompt would not display on client-side) Recommended Products ` }()} ${function(){ const rule = data.data; const getImageHeight = function(image){ const image_size = rule.config.image_size || 0; const imageWidth = image.width || 600; const imageHeight = image.height || 800; let ratio = 0; if(image_size == 0){ ratio = (imageHeight / imageWidth).toFixed(2); }else if(image_size == 1){ ratio = 1.5; }else if(image_size == 2){ ratio = 1; }else if(image_size == 3){ ratio = 0.75; } return imageWidth * ratio; }; const toQuery = obj => Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v => `${k}[]=${encodeURIComponent(v)}`).join('&') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&'); return ` ${rule.config.title} * ${product.title} ${rule.config.quick_shop_button_text} ` }()} class SpzSmartBlockComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this.i18n_ = {}; this.config_ = {}; this.show_type_ = 3; this.product_resource_id_ = ''; this.collection_resource_id_ = ''; this.cart_items_ = []; this.customer_id_ = ''; this.order_id_ = ''; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { const template_type = window.SHOPLAZZA.meta.page.template_type; if (template_type === 1) { this.show_type_ = 3; this.product_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 2) { this.show_type_ = 4; this.collection_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 15){ this.show_type_ = 5; } else if (template_type === 13){ this.show_type_ = 6; } else if (template_type === 20){ this.show_type_ = 7; this.customer_id_ = window.SHOPLAZZA.customer.customer_id; } else if (template_type === 35){ this.show_type_ = 8; this.order_id_ = window.location.pathname.split('/').pop(); } this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('smart mounted'); const that = this; const themeName = window.SHOPLAZZA.theme.merchant_theme_name; const isGeek = /Geek/.test(themeName); this.fetchRules().then((res) => { if (res && res.rules && res.rules.length) { const blockEl = document.getElementById('smart_recommend_block'); SPZ.whenApiDefined(blockEl).then((api) => { api.render({data: res}, true).then(() => { if (isGeek && that.show_type_ === 6) { blockEl.querySelector('.plugin_container_wrpper').style.padding = '30px 0'; } const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` .plugin__recommend_container,.app-recommend-card { display: none !important; } `; document.head.appendChild(recommendStyle); const fetchList = []; res.rules.forEach((rule) => { fetchList.push(this.fetchRuleProductList(rule.id)); }); const fetchAll = Promise.all(fetchList); fetchAll.then((p_res) => { res.rules.forEach((rule, index) => { rule.products = p_res[index] && p_res[index].products; const ruleEl = document.getElementById('smart_recommend_rule_' + rule.id); SPZ.whenApiDefined(ruleEl).then((api) => { api.render({data: rule}, true).then(() => { that.impressListen(`#smart_recommend_rule_ul_${rule.id}`, function(){ that.trackRuleImpress(rule); }); const btnElList = document.querySelectorAll(`#smart_recommend_rule_ul_${rule.id} button`); btnElList.forEach((btnEl) => { if (btnEl && rule.config && rule.config.quick_shop_button_bg_color && rule.config.quick_shop_button_text_color) { btnEl.style.backgroundColor = rule.config.quick_shop_button_bg_color; btnEl.style.color = rule.config.quick_shop_button_text_color; } }) }); }); }); }); }) }) } else { if (window.top !== window.self) { const template_type = window.SHOPLAZZA.meta.page.template_type; const holderEl = document.getElementById('smart_recommend_preview_no_data_placeholder'); SPZ.whenApiDefined(holderEl).then((api) => { api.render({data: { isCart: template_type === 13, isCollection: template_type === 2, isProduct: template_type === 1, isIndex: template_type === 15 }}, true); }); } } }); } setAction_() { this.registerAction('quickShop', (data) => { const that = this; const product_id = data.args.product_id; const productIndex = data.args.productIndex; const rule_id = data.args.rule_id; const ssp = data.args.ssp; const scm = data.args.scm; const cfb = data.args.cfb; const ifb = data.args.ifb; const modalRender = document.getElementById('smart_recommend_product_modal_render'); if (product_id) { this.fetchProductData(product_id).then((res) => { const product = res.products && res.products.length && res.products[0] || {}; product.cfb = cfb; product.ifb = ifb; SPZ.whenApiDefined(modalRender).then((api) => { api.render({product: product, productIndex: productIndex, rule_id: rule_id, ssp: ssp, scm: scm, show_type: that.show_type_}, true).then(() => { const modalEl = document.getElementById('smart_recommend_product_modal'); SPZ.whenApiDefined(modalEl).then((modal) => { that.impressListen('#smart_recommend_product_modal', function(){ that.trackQuickShop({ rule_id: rule_id, product_id: product_id }); }); modal.open(); }); const formEl = document.getElementById('smart_recommend_product_form'); SPZ.whenApiDefined(formEl).then((form) => { form.setProduct(product); }); const variantEl = document.getElementById('smart_recommend_product_variants'); SPZ.whenApiDefined(variantEl).then((variant) => { variant.handleRender(product); }); }); }) }); } }); this.registerAction('handleScroll', (data) => { this.directTo(data.args.rule_id, data.args.direction); }); this.registerAction('handleProductChange', (data) => { const variant = data.args.data.variant; const product = data.args.data.product; const imageRenderEl = document.getElementById('smart_recommend_product_image'); SPZ.whenApiDefined(imageRenderEl).then((api) => { api.render({ variant: variant, product: product }, true); }); }); this.registerAction('handleAtcSuccess', (detail) => { const data = detail.args; data.data.product = data.data.product || {}; data.data.variant = data.data.variant || {}; const product_id = data.data.product.id; const product_title = data.data.product.title; const variant_id = data.data.variant.id; const price = data.data.variant.price; const rule_id = data.rule_id; const aid = `smart_recommend.${this.show_type_}.${rule_id}`; const ifb = data.data.product.ifb; const cfb = data.data.product.cfb; const ssp = data.ssp; const scm = data.scm; const spm = `smart_recommend_${this.show_type_}.${data.spmIndex}`; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; this.tranckAddToCart(params); }); this.registerAction('addATCHook', (data) => { const params = data.args; const spm = `smart_recommend_${this.show_type_}.${params.spmIndex}`; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: `smart_recommend.${this.show_type_}.` + params.rule_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, }, once: true }); }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } fetchRules() { const payload = { show_type: this.show_type_, }; let that = this; if (this.show_type_ === 6) { let line_items = []; return this.fetchCart().then((res) => { if (res && res.cart && res.cart.line_items) { line_items = res.cart.line_items.map((item) => { return { product_id: item.product_id, variant_id: item.variant_id, quantity: item.quantity, price: item.price } }); } payload.line_items = line_items; that.cart_items_ = line_items; return that.fetchRulesRequest(payload); }); } else { if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return this.fetchRulesRequest(payload); } } fetchRulesRequest(payload) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_query", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }); } fetchCart() { return fetch(`/api/cart/cart-select?r=${Math.random().toString(36).slice(-4)}`) .then((res) => { if (res.ok) { return res.json(); } }); } fetchRuleProductList(rule_id) { const payload = { page: 1, limit: 100, fields: ["title", "url", "image", "min_price_variant.price", "min_price_variant.compare_at_price"], rule_id: rule_id, }; if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 6) { payload.line_items = this.cart_items_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); }); } fetchProductData(product_id) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ product_ids: [product_id], fields: [ "images", "options", "min_price_variant", "variants"] }) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); const loadingEl = document.getElementById('smart_recommend_loading'); if (loadingEl) { loadingEl.style.display = 'none'; } }); } getStyle(ele, style) { if (!ele) return; if (window.getComputedStyle) { return window.getComputedStyle(ele)[style]; } return ele.currentStyle[style]; } directTo(id, direction) { const scrollElement = document.getElementById(`smart_recommend_rule_ul_${id}`); const blockWidth = parseInt(this.getStyle(scrollElement, 'width')); const scrollLength = (blockWidth * 0.19 - 12) * 5; const scrollPoint = scrollElement.scrollWidth - scrollElement.clientWidth; if (!scrollElement) return; if (direction === 'left') { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft - scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: Math.max(scrollElement.scrollLeft - scrollLength, 0), behavior: 'smooth' }); } else { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint + 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: scrollElement.scrollLeft >= scrollPoint - 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); } } trackRuleImpress(rule) { if (window.sa && window.sa.track) { window.sa.track("plugin_common", { plugin_name: "upsell", event_type: "impressions", rule_id: rule.id, ssp: rule.ssp, scm: rule.scm, show_type: this.show_type_, support_app_block: window.SHOPLAZZA.theme.support_app_block }); window.sa.track("module_impressions", { aid: `smart_recommend.${this.show_type_}.${rule.id}`, support_app_block: window.SHOPLAZZA.theme.support_app_block }); } } trackQuickShop(data) { window.sa && sa.track && sa.track("plugin_common", { plugin_name: "upsell", event_type: "quick_shop", rule_id: data.rule_id, product_id: data.product_id, show_type: this.show_type_, }); } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart-block', SpzSmartBlockComponent); ${(function(){ const product = data.product; const toQuery = obj => Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v => `${k}[]=${encodeURIComponent(v)}`).join('&') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&'); return ` ${product.images.map((image) => { return `` }).join('')} ${product.title} See detail Quantity Add To Cart Buy Now `; })()} ${(function(){ const product = data.product; const avail_variants = product.variants.filter(function(variant){ return variant.available; }); const selected_variant = product.min_price_variant.available ? product.min_price_variant : avail_variants.length && avail_variants[0]; return ` ${option.name} ${ option.values.map(function(value, index){ const checked = selected_variant["option"+option.position] == value ? "checked": ""; return ` ${value} ` }).join("") } ` })()} UFLASHION INFO ABOUT US PRIVACY POLICY PAYMENT METHODS TERMS & CONDITIONS HELP & SUPPORT CONTACT US SHIPPING & DELIVERY RETURN & EXCHANGE POLICY FOLLOW US JOIN US Join us to get more benefits Your email Join Please fill in this field Please enter a valid email address ${data.errors && data.errors[0]} Thanks for subscribing UFLASHION INFO ABOUT US PRIVACY POLICY PAYMENT METHODS TERMS & CONDITIONS HELP & SUPPORT CONTACT US SHIPPING & DELIVERY RETURN & EXCHANGE POLICY FOLLOW US JOIN US Join us to get more benefits Your email Join Please fill in this field Please enter a valid email address ${data.errors && data.errors[0]} Thanks for subscribing © 2024 Uflashion 10% off your first order1 Thank you for your subscription, you can enjoy a 10% discount for the first purchase. Enter a discount code Copy code ${function() { const force_image_size = "1.5"; const product_hover_on = true; const product_show_sale_label = true; const product_save_type = "amount"; const badge1 = "New"; const badge2 = ""; const badge3 = ""; const product_title_mobile_hide = true; const product_title_style = "hide"; const enable_collection_thumb_image = true; const variantNames = ["color"]; const thumbMaxNum = 4; const suffix_id = null || ''; const url = data.url; const productId = data.id; const price = data.price; const productAvailable = data.available; const productVariants = data.variants || []; const images = data.images || []; const image = data.image || {}; const imageWidth = image.width; let imageHeight = image.height; let image2 = null; let imageHoverOn = false; if (force_image_size !== 'natural') { imageHeight = imageWidth * force_image_size; } if (product_hover_on) { for (let i = 1; i < images.length; i++) { const img = images[i]; if (img.src && img.src.indexOf('video=') === -1) { image2 = img; imageHoverOn = true; break; } } } let compareAtPrice = data.compare_at_price; let offRatio = data.off_ratio; let discountMaxUrl = url; const showFrom = data.price_min != data.price_max ? true : false; for (let i = 0; i < productVariants.length; i++) { const variant = productVariants[i]; if (variant.price == price && compareAtPrice < variant.compare_at_price) { compareAtPrice = variant.compare_at_price; offRatio = variant.off_ratio; variant.available && (discountMaxUrl = variant.url); } } const soldOutText = "Sold out"; let soldOn = false; let saleOn = false; if (productAvailable) { if (product_show_sale_label && price < compareAtPrice) { saleOn = true; } } else { soldOn = true; } const diffPrice = compareAtPrice - price; const saveLabelContent = product_save_type == 'percent' ? (offRatio + '%') : ``; let saveText = "Save {off_ratio}"; saveText = saveText.replace('{off_ratio}', saveLabelContent); const productTitle = data.title; const heading = "title" === 'subtitle' ? data.brief : productTitle; const variantValues = []; const showVariants = []; if (data.need_variant_image && enable_collection_thumb_image && variantNames.length > 0) { for (let i = 0; i < (data.options || []).length; i++) { const option = data.options[i]; const optionName = option.name.toLowerCase(); if (variantNames.includes(optionName)) { for (let j = 0; j < productVariants.length; j++) { const variant = productVariants[j]; const value = variant.options[i].value; if (!variantValues.includes(value)) { variantValues.push(value); showVariants.push(variant); } } break; } } } return ` ${showVariants.map(item => { return ` `; }).join('')} ${saleOn ? saveText : soldOutText} ${badge1} ${badge2} ${badge3} ${HEADING} From ${saveText} ${showVariants.map((item, idx) => { let showMoreHtml = ''; if (idx == thumbMaxNum) { showMoreHtml += ` +${showVariants.length - thumbMaxNum} `; } return ` ${showMoreHtml} `; }).join('') } `; }()} ${function() { const defaultSelectedVariant = data.variants.find(v => v.available) || data.variants[0]; const defaultIndex = !!defaultSelectedVariant ? data.images.findIndex(img => img.src == (defaultSelectedVariant.image && defaultSelectedVariant.image.src)) : -1; const initialSlide = defaultIndex == -1 ? 0 : defaultIndex; const attrs = data.images.length > 1 ? 'slide controls' : ''; return ` ${data.images.map(img => ` `).join('')} `; }()} ${data.images.map((img, index) => ` `).join('')} ${DATA.TITLE} ${data.brief} ${function() { const defaultSelectedVariant = data.variants.find(v => v.available) || data.variants[0]; return ` ${("Save {off_ratio}").replace('{off_ratio}', ("amount") == 'percent' ? defaultSelectedVariant.off_ratio + '%' : `` )} - `; }()} Quantity ${function() { const defaultSelectedVariant = data.variants.find(v => v.available) || data.variants[0]; let status_lan = "Add to cart"; if ((defaultSelectedVariant && !defaultSelectedVariant.available) || (!defaultSelectedVariant && !data.available)) { status_lan = "Sold out"; } return ` ${status_lan} - Buy now `; }()} ${function() { var thumbSwitchName = ''; return data.product.options.map((option, index) => { const optionName = option.name || ''; const optionPosition = 'option' + (index + 1); const values = option.values || []; const variantThumbs = ["color"] || []; var isThumbImage = false; if (data.product.need_variant_image && thumbSwitchName == '') { for (let i = 0; i < variantThumbs.length; i++) { const name = variantThumbs[i].toLowerCase(); if (name == optionName.toLowerCase()) { isThumbImage = true; thumbSwitchName = name; } } } const thumbStyle = "image_with_text"; const thumbType = isThumbImage ? thumbStyle.replace(/_/g, '-') : 'text'; return ` ${optionName.slice(0, 1).toUpperCase() + optionName.slice(1).toLowerCase()} : ${values.map(value => { const disabled = data.name == optionName && data.disabledValues.includes(value) ? 'disabled' : ''; let selected = ''; if (disabled != 'disabled' && data.selectedValues[optionName] == value) { selected = 'selected'; } let thumbImage = null; if (isThumbImage) { const variants = data.product.variants; for (let i = 0; i < variants.length; i++) { const variant = variants[i]; if (variant[optionPosition] == value && thumbImage == null) { thumbImage = variant.image; break; } } } return ` ${value} ${value} `; }).join('')} `; }).join(''); }()} ${data.targetOption || data.defaultValue || ''} ${("Save {off_ratio}").replace('{off_ratio}', ("amount") == 'percent' ? data.variant.off_ratio + '%' : `` )} - - ${function() { const freeAmount = 69; const totalPrice = data.total_price || data.cart.total_price; const amountDiff = freeAmount - totalPrice const percentDiff = (amountDiff > 0 ? (totalPrice / freeAmount * 100) : 100) + '%'; const spendTip = "Spend {amount} more and get free shipping!"; let tipText = "Your order is free delivery"; if (amountDiff > 0) { tipText = spendTip.replace('{amount}', ``); } return ` ${tipText} `; }()} ${data.line_items.map(item => { const variantNames = item.options.map(option => option.value).join(' / '); return ` ${item.product_title} ${variantNames} Remove `; }).join('')} CART Add note Write something here to seller. ${data.note || data.value} * Discount ${data.total_discount > 0 ? '-' : ''} * * Subtotal Taxes and shipping calculated at checkout Check out Your shopping cart is empty Continue shopping YOUR MAY ALSO LIKE ${data.products && data.products.map(data => ` ${function() { const force_image_size = "1.5"; const product_hover_on = true; const product_show_sale_label = true; const product_save_type = "amount"; const badge1 = "New"; const badge2 = ""; const badge3 = ""; const product_title_mobile_hide = true; const product_title_style = "hide"; const enable_collection_thumb_image = true; const variantNames = ["color"]; const thumbMaxNum = 4; const suffix_id = "cart-recommendations-mobile" || ''; const url = data.url; const productId = data.id; const price = data.price; const productAvailable = data.available; const productVariants = data.variants || []; const images = data.images || []; const image = data.image || {}; const imageWidth = image.width; let imageHeight = image.height; let image2 = null; let imageHoverOn = false; if (force_image_size !== 'natural') { imageHeight = imageWidth * force_image_size; } if (product_hover_on) { for (let i = 1; i < images.length; i++) { const img = images[i]; if (img.src && img.src.indexOf('video=') === -1) { image2 = img; imageHoverOn = true; break; } } } let compareAtPrice = data.compare_at_price; let offRatio = data.off_ratio; let discountMaxUrl = url; const showFrom = data.price_min != data.price_max ? true : false; for (let i = 0; i < productVariants.length; i++) { const variant = productVariants[i]; if (variant.price == price && compareAtPrice < variant.compare_at_price) { compareAtPrice = variant.compare_at_price; offRatio = variant.off_ratio; variant.available && (discountMaxUrl = variant.url); } } const soldOutText = "Sold out"; let soldOn = false; let saleOn = false; if (productAvailable) { if (product_show_sale_label && price < compareAtPrice) { saleOn = true; } } else { soldOn = true; } const diffPrice = compareAtPrice - price; const saveLabelContent = product_save_type == 'percent' ? (offRatio + '%') : ``; let saveText = "Save {off_ratio}"; saveText = saveText.replace('{off_ratio}', saveLabelContent); const productTitle = data.title; const heading = "title" === 'subtitle' ? data.brief : productTitle; const variantValues = []; const showVariants = []; if (data.need_variant_image && enable_collection_thumb_image && variantNames.length > 0) { for (let i = 0; i < (data.options || []).length; i++) { const option = data.options[i]; const optionName = option.name.toLowerCase(); if (variantNames.includes(optionName)) { for (let j = 0; j < productVariants.length; j++) { const variant = productVariants[j]; const value = variant.options[i].value; if (!variantValues.includes(value)) { variantValues.push(value); showVariants.push(variant); } } break; } } } return ` ${showVariants.map(item => { return ` `; }).join('')} ${saleOn ? saveText : soldOutText} ${badge1} ${badge2} ${badge3} ${HEADING} From ${saveText} ${showVariants.map((item, idx) => { let showMoreHtml = ''; if (idx == thumbMaxNum) { showMoreHtml += ` +${showVariants.length - thumbMaxNum} `; } return ` ${showMoreHtml} `; }).join('') } `; }()} `).join('')} × This website uses cookies This website uses cookies to improve user experience. By using our website you consent to all cookies in accordance with our Cookie Policy. Read more Accept all Decline all Powered by CookieScript 111 Item has been added ${(function(){ const products = data.products; const getDefaultVariant = function(product){ if (product.min_price_variant.available){ return product.min_price_variant; }else { const avail_variants = product.variants.filter(function(variant){ return variant.available; }); if (avail_variants.length) { return avail_variants[0]; } } }; const toQuery = obj => Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v => `${k}[]=${encodeURIComponent(v)}`).join('&') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&'); const getDefaultTrackParams = function(product, index){ const variant = getDefaultVariant(product); const params = { aid: 'smart_recommend.2.' + data.id, scm: product.scm || data.scm || '', spm: data.spmBase + '.' + index, ssp: data.ssp || '', }; const trackParams = Object.keys(params).map(function(key){ return params[key]; }).join('__'); return trackParams; }; const hasMore = (data.products.length - data.target_top_product_num - data.page * data.limit) === 0; return ` ${(function(){ return ` ${data.config.pop_title} ${data.rebate_tips || ''} `; })()} ${product.title} Added `; })()} class SpzCustomComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this._atcLineItem = {}; this.cart_ = {}; this.top_product_ids_ = []; this.products_ = []; this.activityId_ = null; this.rendered_ = false; this.myInterceptor_ = null; this.i18n_ = {}; this.config_ = {}; this.page_ = 1; this.limit_ = 10; this.loading_ = false; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('pop mounted'); this.i18n_ = window.smartRecommendI18n && window.smartRecommendI18n[document.documentElement.lang || 'en-US'] || {}; const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const modalEl = document.getElementById("smart_cart_pop_modal"); const spmBase = `smart_recommend_2`; const extra = { spmBase: spmBase, i18n: this.i18n_, }; const that = this; document.addEventListener('dj.addToCart', (event) => { try { const e = event.detail; if (e.source === 'buy_now' || window.__upsell_block || this.rendered_) return; that.fetchActivityData({product_id: e.product_id, variant_id: e.variant_id}).then(data => { if (!data || !data.products || !data.products.length) return; that.config_ = data.config; const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` #plugin_recommend_atc_pop { display: none !important; } `; document.head.appendChild(recommendStyle); if (data.config.pop_frequency === 'once' && window.sessionStorage.getItem('smart_pop_times') > 0) return; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ api.render(Object.assign({}, data, extra), true).then(function() { that.rendered_ = true; if (data.products.length) { const headEl = document.getElementById("smart_cart_pop_head_render"); if (headEl) { SPZ.whenApiDefined(headEl).then(function(head){ head.render({ data: data }); }); } SPZ.whenApiDefined(modalEl).then(function(api){ that.impressListen('#smart_cart_pop_activity', function(){ that.trackPluginImpression_(data); }); api.open(); const intersectionObserver = new IntersectionObserver( function (entries) { if (entries[0].intersectionRatio > 0){ !that.loading_ && (that.products_.length - that.target_top_product_num_) === that.page_ * that.limit_ && that.viewMore(); } }, { threshold: [0.1] } ); intersectionObserver.observe( document.querySelector('#smart_cart_pop_view_more_text') ); }); } }) }); }) } catch (e) { console.error(e); } }); } unmountCallback() { } viewMore () { const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const that = this; const data = {}; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ that.fetchActivityData({ page: that.page_ + 1, limit: that.limit_ }).then(function(data) { data.products = that.products_; data.target_top_product_num = that.target_top_product_num_; data.i18n = that.i18n_; data.spmBase = `smart_recommend_2`; api.render(data); }) }) } fetchActivityData(data) { const that = this; if (data.product_id) { that._atcLineItem = data; } that.loading_ = true; return that.getCart().then(cart => { that.cart_ = cart.cart; return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_activities", { method: "POST", headers: { "Content-Type": "application/json", "store-id": window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ "show_type": 2, "line_item": { "product_id": that._atcLineItem.product_id, "variant_id": that._atcLineItem.variant_id, }, line_items: cart.cart.line_items, "page": data.page || 1, "limit": data.limit || 10, }) }).then(function(res){ if(res.ok){ return res.json(); } }).then(function(data){ data.cart = cart.cart; if (data.page === 1) { that.target_top_product_num_ = data.target_top_product_num || 0; } that.products_ = that.products_.concat(data.products || []); that.page_ = data.page || 1; that.limit_ = data.limit || 10; return data; }).catch(function(e){ console.log(e); }).finally(function(){ that.loading_ = false; }) }); }; setAction_() { this.registerAction('changeBannerColor', (data) => { if (!data.args.data || !data.args.data.data || !data.args.data.data.data) return false; const config = data.args.data.data.data.config; const bannerBgEl = document.querySelector('.smart_cart_pop_banner_bg'); if (bannerBgEl && config) { bannerBgEl.style.background = config.banner_bg_color; bannerBgEl.style.color = config.banner_text_color; } }); this.registerAction('handleProductChange', (data) => { const that = this; const imageEl = document.getElementById(`smart_cart_pop_image_${data.args.data.product_id}`); SPZ.whenApiDefined(imageEl).then(function(api){ api.render({ data: data.args.data, config: that.config_ }); }); const atcTextEl = document.getElementById(`smart_cart_pop_atc_${data.args.data.product_id}`); SPZ.whenApiDefined(atcTextEl).then(function(api){ api.render({ data: data.args.data, defaultText: data.args.defaultText, soldOutText: that.i18n_.sold_out }); }); if (data.args.data.variant.available) { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.remove('zb-pointer-events-none'); } else { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.add('zb-pointer-events-none'); } }); this.registerAction('handleProduct', (detail) => { const that = this; this.renderProductsForm_(detail.args.data.data); }); this.registerAction('addATCHook', (data) => { const params = data.args; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: 'smart_recommend.2.' + params.activity_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${params.spm}`, }, once: true }); }); this.registerAction('handleAtcSuccess', (detail) => { detail.args.data.product = detail.args.data.product || {}; detail.args.data.variant = detail.args.data.variant || {}; const defParams = detail.args.product.split('__'); const product_id = detail.args.data.product.id; const product_title = detail.args.data.product.title; const variant_id = detail.args.data.variant.id; const price = detail.args.data.variant.price; const aid = defParams[0]; const ifb = detail.args.data.product.ifb; const cfb = detail.args.data.product.cfb; const scm = defParams[1]; const spm = defParams[2]; const ssp = defParams[3]; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; const activity_id = `${detail.args.activity_id}`; const target_drive_way = detail.args.target_drive_way; document.getElementById(`smart_cart_pop_loading_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_added_${product_id}`).classList.remove('zb-hidden'); setTimeout(() => { document.getElementById(`smart_cart_pop_added_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_atc_${product_id}`).classList.remove('zb-hidden'); document.getElementById(`smart_cart_pop_atc_btn_${product_id}`).classList.remove('zb-pointer-events-none'); }, 1000); this.tranckAddToCart(params); if (target_drive_way === 'rebate') { const bannerEl = document.getElementById(`smart_cart_pop_banner`); this.getRecommendInfo(activity_id).then(res => { if (res && res.rebate_tips) { bannerEl.innerHTML = res.rebate_tips; } }) } }); this.registerAction('handleCartSummary', (event) => { const that = this; const checkoutButtonEle = document.getElementById("smart_cart_pop_checkout_button"); if (checkoutButtonEle) { SPZ.whenApiDefined(checkoutButtonEle).then(function(api){ api.render({ i18n: that.i18n_ }, false); }); } const tipEl = document.getElementById("smart_cart_pop_tip_info"); const cart = event && event.args && event.args.data && event.args.data.data; if (!tipEl || !cart) return; let total_price = cart.total_price; if (!total_price) { SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); } else { this.getBindDiscount_(cart.line_items).then(res => { if (res && res.discount_code){ const total = cart.line_price - cart.total_discount - res.bundle_discount_value; if (total > 0) { total_price = total; } else { total_price = 0; } } SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); }) } }); this.registerAction('open', () => { window.sessionStorage.setItem('smart_pop_times', Number(window.sessionStorage.getItem('smart_pop_times')) + 1); }); this.registerAction('close', () => { this.rendered_ = false; this.products_ = []; window.djInterceptors && window.djInterceptors.track.eject(this.myInterceptor_); }); } getCart() { return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/cart`, { method: 'GET', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, }).then(res => res.json()) } getRecommendInfo (activity_id) { return this.getCart().then(cart => { this.cart_ = cart.cart; return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/possum/recommend_info`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: JSON.stringify({ show_type: 2, rule_id: `${activity_id}`, line_items: cart.cart.line_items, line_item: this._atcLineItem, }) }).then(res => res.json()) }) } renderProductsForm_(data) { const products = data.products; const listPopRenderEl = document.getElementById("smart_cart_pop_render"); if (!listPopRenderEl) return; listPopRenderEl.querySelectorAll('.smart_cart_pop_atc_btn_bg').forEach(function(el){ el.style.background = data.config.add_to_cart_button_color; }); products.forEach(function(product){ const productId = product.id; const productFormEls = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"]`); let variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_mobile ljs-variants`); if (window.innerWidth > 768) { variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_pc ljs-variants`); } productFormEls.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.setProduct(product); }); }); variantsEl.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.handleRender(product); }); }) }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } trackPluginImpression_(rule){ if (window.sa && window.sa.track) { window.sa.track("module_impressions", { aid: `smart_recommend.2.${rule.id}` }); } } getBindDiscount_(carts) { let bundle_sale_ids = []; try { bundle_sale_ids = sessionStorage['bundle_sale_ids'] && JSON.parse(sessionStorage['bundle_sale_ids']).filter((item, index, arr) => arr.indexOf(item, 0) === index).slice(-5); } catch (err) { console.error(err); } if (!carts.length) { Promise.resolve(); } return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/bundle-sales/cart`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', 'store-id': window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ cart: carts, action_type: 'cart', bundle_sale_ids }) }).then(res => res.json()) } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart', SpzCustomComponent); ${function(){ return ` ${data.data.rebate_tips || ''} `; }()} ${function(){ const getImageHeight = function(image){ const width = image.width || 500; const height = image.height || 500; const image_size = data.config.image_size || 0; let ratio = 0; if(image_size == 0){ ratio = (height / width).toFixed(2); }else if(image_size == 1){ ratio = 1.5; } return 132 * ratio; }; const image = data.data.variant.image || data.data.product.image; return ` `; }()} ${(function(){ const product = data.product; const avail_variants = product.variants.filter(function(variant){ return variant.available; }); const selected_variant = product.min_price_variant.available ? product.min_price_variant : avail_variants.length && avail_variants[0]; return ` ${option.name} ${ option.values.map(function(value, index){ const checked = selected_variant["option"+option.position] == value ? "checked": ""; return ` ${value} ` }).join("") } ` })()} ${(function(){ const variant = data.variant; return ` `; })()} ${(function(){ const variant = data.variant; return ` ${ variant.options.map(function(option){ return option.value; }).join("/") || 'Not exist' } `; })()} ${(function(){ const variant = data.data && data.data.variant; const defaultText = data.defaultText || 'Add To Cart'; const text = (!variant || variant.available) ? defaultText: data.soldOutText; return ` ${text} `; })()} ${(function(){ let cart = data; if(data.data) { cart = data.data; } return ` ${cart.item_count >=0 ? cart.item_count : '..'} `; })()} ${(function(){ return ` ${data.i18n.checkout} `; })()} × Don't leave without taking discount UP TO 50% OFF On your first order Invalid email Continue NO,I'LL PAY FULL PRICE * Ihre persönlichen Daten werden strengstens vor Offenlegung geschützt. By signing up you agree with our Privacy Policy. GIFTS POINTS 20% OFF 2nd item SALE OFFER 20 % OFF FOR THE 2nd ITEM 20 % OFF FOR THE 2nd ITEM 30 % OFF FOR THE 3rd ITEM 30 % OFF FOR THE 3rd ITEM 40 % OFF FOR THE 4th ITEM 40 % OFF FOR THE 4th ITEM 100 % OFF FOR THE 5th ITEM 100 % OFF FOR THE 5th ITEM COLLECT ALL *Discounts would automatically apply when placing an order Originaltext Diese Übersetzung bewerten Mit deinem Feedback können wir Google Übersetzer weiter verbessern